考虑以下表格:
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 StoreGeneratedPattern = Computed,则会显示有关Nr字段的错误消息。如果我将SCN字段设置为ConcurrencyMode = Fixed和StoreGeneratedPattern = None,则SaveChanges将返回而不会出现错误。