出現(xiàn)上述問題的原因,往往是因?yàn)橹麈I的關(guān)系。
在SqlServer中你允許設(shè)計(jì)一張沒有主鍵標(biāo)識(shí)(Primary key)的數(shù)據(jù)表,但是在定義entity class的屬性時(shí),必須至少包含一個(gè)的主鍵屬性(IsPrimaryKey=true)。這不單是數(shù)據(jù)庫設(shè)計(jì)標(biāo)準(zhǔn)的要求,DataContext對(duì)象會(huì)使用PrimaryKey屬性值作為實(shí)體對(duì)象的唯一標(biāo)識(shí),用來進(jìn)行實(shí)體對(duì)象的生命周期管理。(因此主鍵是必須的)
當(dāng) LINQ to SQL 保存對(duì)數(shù)據(jù)庫所做的更改時(shí),只會(huì)檢索并持久保存您標(biāo)識(shí)為列的那些成員。 不具有此屬性的成員被假定為非持久的,且不會(huì)被提交以進(jìn)行插入或更新。(這就是為什么當(dāng)沒有主鍵的時(shí)候,查詢沒有問題,而增刪改會(huì)報(bào)錯(cuò)的原因!)
原因我們搞清楚了,可是在項(xiàng)目中有時(shí)候確實(shí)難免會(huì)有無主鍵,該如何解決呢?研究中。。。。
希望哪位朋友能分享答案。
又進(jìn)一步試驗(yàn)了一下,發(fā)現(xiàn)組合主鍵還是可以用的?梢娺@個(gè)問題是你必須有主鍵,沒有主鍵就會(huì)報(bào)錯(cuò)。這樣的話,出現(xiàn)問題的時(shí)候還是少之又少的。
目前的權(quán)益之計(jì)就是如果真的要對(duì)這樣的表進(jìn)行增刪改操作,就用存儲(chǔ)過程去完成了。但總是在想難道linq就真的沒有法子了嗎?