2011-12-22 120 views
1

我有一個客戶實體。我的客戶實體具有與我的給定實體有關的地址值對象集合。如果客戶添加新地址,當我將其傳回存儲庫進行更新時,我的存儲庫如何知道要添加哪個地址?我正在使用純ado.net。如何更新ado.net中包含c#中其他對象集合的對象?

public class Customer 
{ 
    public List<Address> Addresses { get; set; } 
} 
public class CustomerRepository 
{ 
    public bool Update(Customer customer) 
    { 
     //Update logic. 
    } 
} 
+0

您使用的是實體框架還是原始的ADO.NET? – 2011-12-22 16:34:29

+0

只是原始的ADO.NET。謝謝。 – Frankie 2011-12-22 20:03:28

+0

快照。執行狀態更改並導出意圖之前和之後比較狀態(壞,但是您的選擇)。 – 2011-12-25 11:59:57

回答

0

事實是,這是複雜的,這就是爲什麼應該使用ORM(EntityFramework,NHibernate等),而不是重新發明輪子。

我認爲你可以做的最簡單的事情就是讓你的實體實現INotifyPropertyChanged並使你的存儲庫適合PropertyChanged。除此之外,您可以跟蹤已更改的對象及其屬性,以便您還可以創建所需的更新。另外,如果你的集合是一個ObservableCollection,你將能夠跟蹤一個項目是否被添加(並進行正確的插入),如果某個對象被刪除(並且如果它被移動到另一個對象上,則進行適當的刪除或更新對象,取決於你期望的邏輯)。

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx http://msdn.microsoft.com/en-us/library/ms668604.aspx

希望它能幫助。

0

值對象是不可變的,這意味着當您更新一個值對象時,您需要刪除它,然後添加更新的對象。

作爲價值對象的身份不存在,那麼你將不得不刪除你的實體/聚合根(客戶)的所有地址,然後再次添加它們。

如果你的值對象非常大,那麼這可能是一個指標,它不應該是一個值對象,而是一個實體。

0

您將需要跟蹤地址集合的狀態。您可以使用每個記錄標誌來指示記錄已插入或更新。

或者,您可以使用數據集而不是列表<>。 DataSet包含對變更跟蹤的支持,您可以將其與ADO.NET綁定(例如,使用SqlDataAdapter)。

相關問題