2016-02-21 50 views
0

假設我正在嘗試構建三層電話簿應用程序,其中以下實體對應於數據庫表,相應的DTO對象,它們通過Web服務發送到AngularJS前端,用戶可以編輯整個電話簿並通過單擊按鈕(不保存單個編輯,而是整本書)保存/放棄所有編輯。使用實體框架同步POCO對象樹

所以我的想法是發送所有Contacts到網絡應用程序,然後用戶編輯聯繫人,詳細信息,添加東西,刪除東西,然後發送所有數據保存到Web服務。

public class Contact{ 
    public int Id; 
    public string Name; 
    public List<PhoneNumber> PhoneNumbers; 
    public List<AddressEntry> Addresses; 
} 

public class PhoneNumber{ 
    public int Id; 
    public string Number; 
    public string Type; 
} 

public class AddressEntry{ 
    public int Id; 
    public string Line1; 
    public string Line1; 
} 

是否有關於如何重新連接此對象樹一些合理的方式 - List<Contact>或(List<ContactDTO>看起來相同),以我的數據庫上下文,並讓實體框架圖,隨着空IDS中的聯絡人應插入那些缺失的應該被刪除,那些被修改的屬性應該被更新?請記住,這些聯繫人也有子對象。

我不想爲每個實體類編寫特定的東西,因爲實際上我將擁有大約100個這些類(這是一個包含許多不同參數類型表的參數配置工具),而當前版本有超過10K行的代碼,重寫的重點是使其合理縮短。

已經嘗試過: 我已經成功地產生微弱的解決方案,其中我強迫我的實體和DTO類來實現interface IObjectWithKey { int Id; },然後煮了即能檢測增加了/刪除/更新,然後傳輸數據的一些通用的東西從實體到使用AutoMapper的DTO類,但是我在子列表中遇到了麻煩。

我需要自己寫嗎?會使用另一個框架,如NHibernate的幫助?

回答

1

無論是在Entity Framewoinrk還是NHibernate中,如果您已經以正確的方式配置了類映射,那麼這兩個框架都將能夠檢測屬性和關聯變化。

如果使用AutoMapper將您的DTO映射到域對象,這裏應該沒有問題,因爲Entity Framework更改跟蹤僅跟蹤對象圖上的更改,並且不會在乎您如何修改它(即通過設置屬性手動或使用類似AutoMapper的庫)。