旧数据库混合主键和外键:更新错误“该属性是对象的关键信息的一部分,无法修改”

时间:2011-11-21 09:13:01

标签: oracle entity-framework-4 primary-key legacy-database

考虑以下表格:

create table master  
( nr number(10,0) identity primary key
  lastmodified date
  scn number(12,0)  -- update from sequence with every update
)
create table details
( nr number(10,0) primary key
  linenum number(3,0) primary key
  <more details>
  scn number(12,0)  -- update from sequence with every update
)

表详细信息具有从列nr到列nr的外键。两个表都映射到主数据库键作为实体键的实体。 Master和Detail之间存在一对多的关系。

当我向EF上下文添加一个带有单个详细信息的master并调用SaveChanges时,master中的nr字段由数据库中的触发器确定,返回给EF,写入details.nr属性并保存在细节表。干得好,EF!

但是当我尝试更新详细信息实体中的一个详细信息字段并调用SaveChanges时,我收到错误“属性'Nr'是对象的密钥信息的一部分,无法修改。”显然,EF会尝试从相关的Master更新Nr字段。当然,这不会被修改。

解决此限制的最佳方法是什么?添加新的实体键字段和更改主键列不是一种选择。

免责声明:我手工编写代码专注于问题,可能无法编译,但我希望你明白这一点。

更新:我认为(希望......)问题已经解决了。如果我将Detail实体中的SCN字段设置为ConcurrencyMode = Fixed AND St​​oreGeneratedPattern = Computed,则会显示有关Nr字段的错误消息。如果我将SCN字段设置为ConcurrencyMode = Fixed和StoreGeneratedPattern = None,则SaveChanges将返回而不会出现错误。

0 个答案:

没有答案