从集合中删除项目时的EntityFramework多重性错误

时间:2013-12-12 14:22:50

标签: .net entity-framework orm

我有一个具有此架构的父对象:

public class User : EntityBase
{
    private List<UserCompany> _UserCompanies = new List<UserCompany>();

    // The list of companies the user can act upon, with a flag indicating their Primary company
    public virtual List<UserCompany> UserCompanies
    {
        get { return _UserCompanies; } 
        set { _UserCompanies = value; }
    }
}

和一个看起来像这样的子对象:

public class UserCompany : EntityBase
{
    [Required]
    public virtual User User { get; set; }

    [Required]
    public virtual Company Company { get; set; }

    [Required]
    public virtual bool IsPrimary { get; set; }
}

两者都继承自EntityBase类:

  public abstract class EntityBase
  {
    protected int _id;

    /// <summary>Database record ID.</summary>
    [DataMember(IsRequired = true)]
    [Required, Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public virtual int Id
    {
      get { return _id; }
      set { _id = value; }
    }
  }

除了通用的对象外,对象没有明确的模型配置:

public EntityBaseConfiguration()
{
  HasKey(m => m.Id);
  Property(m => m.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}

我遇到的问题是从User.UserCompanies集合中删除UserCompany会导致此错误:

* 来自'UserCompany_User'AssociationSet的关系处于'已删除'状态。给定多重约束,相应的'UserCompany_User_Source'也必须处于'已删除'状态。*

我对这个错误的解释是它希望User对象也被标记为Deleted,这不是我的意图。任何人都可以建议如何在这种情况下成功删除UserCompany对象(不删除用户或公司)?

1 个答案:

答案 0 :(得分:0)

这是发生了什么。没有相关用户就不能存在UserCompany(因为UserCompany.User被标记为必需。当您从用户的UserCompanies集合中删除UserCompany时,实体框架将尝试仅执行以下操作:删除关联,而不是UserCompany.EF非常谨慎,并且不会假设你想要删除对象。它会尝试取代外键 - 但它不能。

所以你必须删除UserCompany对象:

context.UserCompanies.Remove(userCompany);

context.Entry(userCompany).State = EntityState.Deleted;