c# – EF程式碼第一:您是如何在跟蹤DDD時從實體的集合中刪除一行?
所以這裡的情況:
DDD宣告您使用儲存庫獲取聚合根,然後使用它來新增/刪除其擁有的任何集合.
新增很簡單,您可以在要新增到的集合中簡單呼叫.Add(Item項).儲存時,將新增一行新增到資料庫.但是,刪除是不同的 – 呼叫.Remove(Item項)不會從資料庫中刪除該項,它只是刪除外來鍵.所以,是的,它在技術上已經不再是集合的一部分,它仍然在資料庫中.
閱讀,唯一的解決方案是使用資料上下文刪除它.但根據DDD,域物件不應該知道資料上下文,因此刪除將不得不在域之外完成.
這是正確的方法嗎?還是離開資料庫充滿孤兒可以接受(也許執行一個例程來清除它們)?
應該在他的書中.
雖然域物件不允許知道物件上下文,但是IDomainEventHandler是 – 因此我有一個DomainObjectDeletionHandler,在控制元件返回到我的應用程式層並儲存更改之前,會從物件上下文中刪除“已刪除”物件.
有關更多資訊,我已經寫了a blog 關於我的域事件的實現,以及我如何把所有東西掛在一起.
希望有幫助:)
編輯
例如,如果您有一個Order類,其OrderItems集合的型別為OrderItem:
public class Order { // Other stuff public void RemoveOrderItem(int orderItemId) { var orderItemToRemove = OrderItems.First(oi => oi.Id == orderItemId) OrderItems.Remove(orderItemToRemove); DomainEvents.Raise(new OrderItemRemoved(orderItemToRemove)); } }
程式碼日誌版權宣告:
翻譯自:http://stackoverflow.com/questions/8360239/ef-code-first-how-are-you-meant-to-delete-a-row-from-an-entitys-collection-whi