出现上述问题的原因,往往是因为主键的关系。
在SqlServer中你允许设计一张没有主键标识(Primary key)的数据表,但是在定义entity class的属性时,必须至少包含一个的主键属性(IsPrimaryKey=true)。这不单是数据库设计标准的要求,DataContext对象会使用PrimaryKey属性值作为实体对象的唯一标识,用来进行实体对象的生命周期管理。(因此主键是必须的)
当 LINQ to SQL 保存对数据库所做的更改时,只会检索并持久保存您标识为列的那些成员。 不具有此属性的成员被假定为非持久的,且不会被提交以进行插入或更新。(这就是为什么当没有主键的时候,查询没有问题,而增删改会报错的原因!)
原因我们搞清楚了,可是在项目中有时候确实难免会有无主键,该如何解决呢?研究中。。。。
希望哪位朋友能分享答案。
又进一步试验了一下,发现组合主键还是可以用的。可见这个问题是你必须有主键,没有主键就会报错。这样的话,出现问题的时候还是少之又少的。
目前的权益之计就是如果真的要对这样的表进行增删改操作,就用存储过程去完成了。但总是在想难道linq就真的没有法子了吗?