2014-03-06 90 views
1

我有一個客戶表,其中有一個名爲客戶地址的子表。Linq to SQL刪除/添加子對象

客戶:

CustomerID 
Name 
IsActive 

CustomerAddresses:

CustomerAddressID 
CustomerID 
Street 
City 
State 
ZipCode 

我想更新客戶表客戶的地址列表,並自動刪除/如果它們已經存在添加的條目。

linq to SQL會自動執行此操作還是必須手動完成。

+0

您想要連接第二個表中的所有地址列並將其插入名稱列? – Mihai

+0

我想但客戶可以有多個地址。 – Rocky3598

回答

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(); 
+0

這就是我最終做的。謝謝。 – Rocky3598