LINQ to SQL 基于属性的映射 一个常见问题

无法更新 EntitySet“...”,因为它有一个 DefiningQuery,而 <ModificationFunctionMapping> 元素中没有支持当前操作的 <DeleteFunction> 元素。

 

出现上述问题的原因,往往是因为主键的关系。

 

在SqlServer中你允许设计一张没有主键标识(Primary key)的数据表,但是在定义entity class的属性时,必须至少包含一个的主键属性(IsPrimaryKey=true)。这不单是数据库设计标准的要求,DataContext对象会使用PrimaryKey属性值作为实体对象的唯一标识,用来进行实体对象的生命周期管理。(因此主键是必须的

 

当 LINQ to SQL 保存对数据库所做的更改时,只会检索并持久保存您标识为列的那些成员。 不具有此属性的成员被假定为非持久的,且不会被提交以进行插入或更新。(这就是为什么当没有主键的时候,查询没有问题,而增删改会报错的原因!)

 

原因我们搞清楚了,可是在项目中有时候确实难免会有无主键,该如何解决呢?研究中。。。。

希望哪位朋友能分享答案。

 

又进一步试验了一下,发现组合主键还是可以用的。可见这个问题是你必须有主键,没有主键就会报错。这样的话,出现问题的时候还是少之又少的。

posted @ 2010-11-30 11:20  慧实  阅读(1236)  评论(5编辑  收藏  举报