2012-11-24 43 views
2

POCO類,我按照推薦的建築路徑「編程實體框架代碼優先」提出。數據訪問層,模型層,及代碼第一實體框架

有一個數據訪問層和模型層其中兩個形成在VS.單獨的項目

模型層對我的類的業務對象。 DataAccess層具有對Model項目的引用,以便它可以爲我的每個業務對象創建上下文和DbSets。

的問題是,在模型中的一些類需要訪問數據層進行計算,但是我不能在我的模型項目中引用的數據訪問層,因爲它會創建一個循環引用。 DataAccess圖層必須引用Model圖層,以便它可以創建DbSets。 另請注意,計算是隻讀的 - 只有getter,它們不會持久化到數據庫。

我一直在尋找這一小時,並已發現有用的信息,但我想我失去了一些東西簡單? POCO類的意思很簡單,但是我的類代表了一些有非常相關但更復雜的計算的東西。

作爲一個簡單的具體的例子我有一個事務類和AccountBalance類。該交易類需要知道爲了顯示特定日期的AccountBalance - 如百分比變化(這只是一個簡單的例子):

公共類交易

{ 
    public DateTime Date { get; set; } 
    public string Description { get; set; }  
     ... etc  
    public double PercentageChange 
    { 
     get 
     { 
      // return TransactionAmount/AccountBalance on TransactionDate  
      // however Transaction has no knowledge of AccountBalance... 
     } 
    } 
} 

感謝

回答

2

我個人不是將業務邏輯放在我的POCO中。 Imho你需要創建一個單獨的服務層(或者你稱之爲的任何服務層)並將業務邏輯放在那裏。 POCO應該確實是沒有任何業務邏輯的簡單對象。

所以你的架構將是這樣的:

GUI - >服務層 - >數據訪問層(庫) - >數據庫。

現在您的所有項目都可以引用您的模型圖層。

+0

Thanks @Leon。聽起來不錯,但我仍然錯過了一些東西。這緩解了訪問問題,但我想要一個具有所有必需屬性的類(如上面的PercentageChange)。我可以通過製作公共類TransactionService:Transaction並在...中添加我的屬性來做到這一點,但數據仍然與Transaction有關,不是嗎?如果我使用_Context.Transactions.ToList()我將無法訪問我的新屬性等。如果我使額外的邏輯來獲取TransactionService類中的事務列表,我擊敗了使用EF的目的... Im困惑,謝謝你的幫助 – user1622713