Linq to SQL删除/添加子对象

时间:2014-03-06 19:58:46

标签: c# sql sql-server linq

我有一个客户表,其中有一个名为客户地址的子表。

客户:

CustomerID
Name
IsActive

CustomerAddresses:

CustomerAddressID
CustomerID
Street
City
State
ZipCode

我想用客户地址列表更新客户表,并让它自动删除/添加条目(如果已存在)。

linq to SQL是自动执行此操作还是必须手动完成。

1 个答案:

答案 0 :(得分:0)

您必须手动同步。

我不确定这是最好的方法。但这是一个选择:

var preExistentIds = (from x in context.CustomerAddresses select x.CustomerAddressID).ToList();

foreach (var deleted in preExistentIds.Where(x => !newCustomerAddr.Exists(y => y.CustomerAddressID == x)))
{
    var entity = new CustomerAddresses { CustomerAddressID = deleted.CustomerAddressID };
    context.CustomerAddresses.Attach(entity);
    context.Entry(entity).State = EntityState.Deleted;
}

foreach(var item in newCustomerAddr){
    var entity = new CustomerAddresses { CustomerAddressID = item.CustomerAddressID };
    context.CustomerAddresses.Attach(entity);
    entity.Fields = item.Field;
    [..]
    context.Entry(entity).State = item.CustomerAddressID == 0? EntityState.Added : EntityState.Modified;
}

db.SaveChanges();