0

1対多の関係でデータを更新する際に問題があります。これが私のエンティティです

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; }
}

Configuration クラスのコードは次のとおりです。

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

マッピングは正しいと思います。追加または削除は正常に機能し、更新のみが例外をスローします。

AssociationSet の「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);
    }

Customer の ContactPersons のリストをクリアしたいのですが、どうすれば...

4

1 に答える 1

0

エンティティを削除せずにCustomerとエンティティ間の関係を削除しています。ContactPersonContactPerson

メソッドを以下のように書き換えて、関連する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);
    }

}
于 2013-10-11T12:08:21.697 に答える