Entity framework 删除带有复合键的实例会给出属性'';是对象的一部分';s键信息,无法修改

Entity framework 删除带有复合键的实例会给出属性'';是对象的一部分';s键信息,无法修改,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,我有以下型号: public class EventDetail { [Key][Column(Order = 1)] public int UserId { get; set; } [Key][Column(Order = 2)] public int EventId { get; set; } [Required(ErrorMessage="")] public string Details { get; set; } } 起初,我试图更新它,但显然您无法更新具有2

我有以下型号:

public class EventDetail
{
    [Key][Column(Order = 1)] public int UserId { get; set; }
    [Key][Column(Order = 2)] public int EventId { get; set; }
    [Required(ErrorMessage="")] public string Details { get; set; }
}
起初,我试图更新它,但显然您无法更新具有2个主键(复合键)的实例。并且被告知我必须删除它,然后重新插入它。现在收集实例,然后尝试将其从上下文中删除,如下所示

EventDetail e = myDbContext.EventDetails
                    .FirstOrDefault(e => e.EventId == 1 && e.UserId == 66);
myDbContext.EventDetails.Remove(e);
它会抛出这个错误:

属性“”是对象的密钥信息的一部分,无法删除 修改


我似乎不明白你在更新时所说的“直接询问正确的udpate”是什么意思。当我试图保存它时,它将不允许更改。如果我可以直接更新并保存它,我不会问这个问题。如果你不理解我问的问题,那么只需简单地问“重建问题,因为我不理解它”我的意思是:你说有人告诉你,你不能更新具有复合键的实体。这是错误的。当然,如果要更改密钥,则无法更新实体。但这适用于每个实体,也适用于具有单个键的实体。我理解您的问题,但我不知道为什么您会在显示的简单代码中出现此异常。调用
Remove
或以后调用
SaveChanges
时是否引发异常?当我直接调用Remove时,它会自动引发错误。如果我在模型上执行TryUpdateModel,并且“eventid”被更改,那么它会在“eventid”上抛出错误,例如属性“eventid”是对象键的一部分。。那是在我保存更改之后发生的。我还尝试从状态myDbContext.Entry(eventDetails.State=State.Deleted)中删除。保存后会抛出相同的错误。这是MVC应用程序(您提到的
TryUpdateModel
)吗?如果您可以显示更多上下文,例如完整的控制器post操作,这可能会有所帮助。我相信问题出现在您在问题中显示的代码之前。