我有一个具有此架构的父对象:
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对象(不删除用户或公司)?
答案 0 :(得分:0)
这是发生了什么。没有相关用户就不能存在UserCompany
(因为UserCompany.User
被标记为必需。当您从用户的UserCompanies集合中删除UserCompany时,实体框架将尝试仅执行以下操作:删除关联,而不是UserCompany.EF非常谨慎,并且不会假设你也想要删除对象。它会尝试取代外键 - 但它不能。
所以你必须删除UserCompany对象:
context.UserCompanies.Remove(userCompany);
或
context.Entry(userCompany).State = EntityState.Deleted;