2013-10-11 4 views
0

У меня есть некоторые проблемы с обновлением данных с отношением один ко многим. Вот мой EntityEF для многих Обновление

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» в AssociationSet «Удалено». Если существует несколько ограничений, соответствующий «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); 
    } 

Я хочу очистить список ContactPersons в Клиента, как на ...

+0

Ошибка на китайском языке: D – Zaki

+0

это означает, что soruce удаляется, цель msut быть deteted тоже ... я думаю .. – Kratos

+0

Вы должны установить или 'true' или' 'false' внутри WillCascadeOnDelete (); «Проверьте документацию для изменения состояний Entities! – Tico

ответ

0

Вы удаляете связь между Customer и ContactPerson лиц без удаления 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); 
    } 

} 
+0

это работает отлично, но nhibernate может удалить дочерние объекты через обновление родителя ... почему ef не может. – Kratos

Смежные вопросы