1

我在問,以便知道這種情況下的最佳做法。我正在使用EF4。插入備註自動插入產品 - 這種情況下的最佳做法?

我有兩個實體叫做「Note」和「Product」。我有另一個名爲「股票」的實體。
注有許多產品,每個產品只能在一個注中(產品必須有註釋)。
無論何時插入,刪除或更新產品,我都必須根據產品附帶的註釋更新相關的股票實體。

在InsertProduct()方法中,我插入產品,然後更新相關庫存。如果產品會破壞庫存規則 - 我收到一個異常,操作將會中止。

在InsertNote()方法中,我不能插入註釋,因爲這樣的東西會自動插入附加的產品和每個需要更新庫存和驗證庫存規則的產品(如上所述)。所以在Note插入之前,我循環遍歷所有產品並調用InsertProduct()。之後,我插入筆記。

直到這裏兩個問題:

  1. 是否事情應該是這樣的?在插入備註之前,是否需要手動插入每個產品的 ?這怎麼解決 事實上,產品必須附加到存在注意( 插入產品時,未插入註釋)?

  2. 我應該在哪裏放入InsertNote()和InsertProduct()方法? 他們每個人處理筆記,產品和股票實體。我應該創建類似NoteService和ProductService類還是應該將它們放在一個大服務類中?

在我問here的問題,我得到的回答是介紹如何創建這樣OnBeforeInsert事件()。這種實施是否正確,需要在插入產品後更新庫存?

回答

0

我不太清楚我是否完全明白自己正在嘗試做什麼,以及驗證股票規則和更新股票意味着什麼。但似乎你想重用InsertProduct from InsertNote當你不應該。

好像InsertNote應該

  • 檢查所有的規則,並相應更新股票(我假設這意味着裝載股進入從庫中的上下文或連接他們,如果你有他們在內存的某個地方)
  • 添加新注意上下文(這將增加你以前投入其收藏的新產品)
  • SaveChanges()

InsertProduct應該

  • 檢查/更新股票如上
  • 產品添加到注意的收集產品
  • SaveChanges()

換句話說,這兩種方法只會重用規則檢查部分。 InsertProduct可能會更好更名爲UpdateProductsOfNote,因爲它聽起來像注意是型號的aggregate根(在DDD,你做持久化/信息庫的操作對集合)。

至於這些方法的存在位置,如果它們不太複雜,那麼將它們添加到存儲庫/數據訪問類(擁有EF上下文對象)就沒問題。看起來他們似乎有很多與他們相關的規則。如果是這樣,某種域名服務可能是更好的選擇。看起來很多規則並不僅僅是支持持久性。如果您重新定位這些方法,那麼您可能不需要處理ObjectContext事件,就像您在引用的帖子中所提到的那樣。

相關問題