我有一个带有组合主键的表(3列):
UTP_ID (ITEMId)
UTS_ID (CategoryID)
USS_ID (SubCategoryID)
例如,当我尝试更改SubCategory时,使用EF 4时出现以下错误:
utl.USS_ID = Convert.ToInt32(ddlSubSetor.SelectedItem.Value);
the property is part of the object's key information and cannot be modified
有任何想法吗?为什么我不能更改它?
最佳答案
EF在主键属性值和对象引用之间实现了身份映射。不允许更改同一对象实例的键。
我可以使用直接SQL来做到这一点:
objectContext.ExecuteStoreCommand(
"UPDATE MyTable SET USS_ID = {0} WHERE UTP_ID = {1} AND UTS_ID = {2} AND USS_ID = {3}",
Convert.ToInt32(ddlSubSetor.SelectedItem.Value),
utl.UTP_ID, utl.UTS_ID, utl.USS_ID);
确保您的实体
utl
与上下文分离,因为此代码直接写入数据库表,并且该实体未获得有关此更改的任何信息。但这避免了必须删除和重新创建实体(由于数据库中旧行上现有的外键约束,这可能是不可能的)。关于entity-framework-4 - 更新主键 Entity Framework 4.0的一部分,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7800130/