0

我的業務邏輯和核心實體緊密耦合。實體框架中的一次性實體代碼優先

  • 的對象,例如,被稱爲會話是數據庫實體,而是在這個詞的字面意義是在此期間,事件記錄現實生活中的會話。
  • 此會話對象還具有[NotMapped]對象並處理非託管資源。
  • Session對象還實現了IDisposable。
  • 我的項目中有一大塊實體具有上述特徵。

這聽起來像是災難。問題是採取什麼方法。

我期待指向設計模式或體系結構的答案,但請包括一個非常簡短的代碼示例來說明您的觀點,而不僅僅是提出的解決方案的名稱。

我到目前爲止想過的是從每個實體派生出一個業務對象,並使用代碼生成從一種類型轉換爲另一種類型。由於這是一個客戶端/服務器應用程序,我希望能夠在我的桌面應用程序中使用實體關係集,儘管是派生的。

不知道如何以可持續的方式實現這一點。

+0

緊密耦合將是快速接近的災難...... –

回答

1

這不是關於設計模式,而是關於一次性實體的所有權。誰擁有該實體?業主負責處理。這是由您的代碼/設計直接定義的。

EF上下文本身是一次性的 - 您可以覆蓋它的Dispose操作並強制它處置所有連接的實體,但這很可能是您不想執行的操作,因爲上下文很可能不是實體的所有者。從上下文請求實體或請求實體持久化的代碼應被視爲負責處置的所有者。

+0

重寫'Dispose'是一個很好的指針,謝謝。然而,在我的情況下,我的實體類提供了像辦公室互操作應用程序之類的東西。正如我可以想象的那樣,構造函數,初始化方法和析構函數都會導致這些引用被調用。問題是這些引用只能在客戶端訪問。因此問題是:我應該如何重新考慮這一點。 –

+0

通過解耦您的實體和那些非託管資源。 –

+0

我想問的是如何構造它。針對每個這樣的實體創建繼承的業務對象?使用組合?其他一些衆所周知的技術? –