EF 一对多更新



我在更新数据时遇到了一些问题,具有一对多的关系。这是我的实体

public class Customer : Entity
{
    public Customer()
    {
        ContactPersons = new List<ContactPerson>();
    }
    /// <summary>
    /// 客户编号
    /// </summary>
    public string Code { get; set; }
    /// <summary>
    /// 客户名称
    /// </summary>
    public string Name { get; set; }

    public ICollection<ContactPerson> ContactPersons { get; set; }
}

/// <summary>
/// 联系人实体
/// </summary>
public class ContactPerson : Entity
{
    /// <summary>
    /// 姓名
    /// </summary>
    public string FullName { get; set; }
    public string Email { get; set; }
    public string QQ { get; set; }
    public virtual Customer Customer { get; set; }
}

在配置类中,代码为:

HasMany(f => f.ContactPersons).WithRequired(f => f.Customer).Map(f => f.MapKey("CustomerId")).WillCascadeOnDelete(true);

我认为映射是正确的,添加或删除工作正常,只更新抛出异常。

关联集中的"Customer_ContactPersons"为"已删除"。如果有多个约束,则相应的"Customer_ContactPersons_Target"也必须为"已删除"。

public void Update(CustomerEditViewModel model)
    {
        var customerDb = _customerRep.GetAll().NotLazy(f => f.ContactPersons).SingleOrDefault(f => f.Id == model.Id);
        //customerDb.ContactPersons.Clear(); can not work either!!
        var count = customerDb.ContactPersons.Count;
        for (var i = 0; i < count; i++)
        {
            customerDb.ContactPersons.Remove(customerDb.ContactPersons.ElementAt(i));
            count--;
        }
        _customerRep.Update(customerDb);
    }

我想清除客户中的联系人列表,如何...

您正在删除CustomerContactPerson实体之间的关系,而不删除ContactPerson实体。

按如下所示重写方法以删除关联的ContactPerson实体。

public void Update(CustomerEditViewModel model)
{
    var customerDb = _customerRep.GetAll().NotLazy(f => f.ContactPersons).SingleOrDefault(f => f.Id == model.Id);
    foreach(var contactPerson in customerDb.ContactPersons.ToList())
    {
        _customerRep.Delete(contactPerson);
    }
}

最新更新