我有一个带有组合主键的表(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/

10-10 07:19