我已經看到了很多這些類型的問題就在這裏,但他們要麼是無人接聽,不太一樣,我的問題問或我需要的細節。如何從實體框架層分離POCO層,仍然能夠將業務邏輯添加到對象
我已經包括了我下面的項目的東西的高級別參考視圖的屏幕截圖。
- 在我的「Sample」解決方案中,我目前有一個名爲
Sample.Data.Model
的項目,其中包含我的數據庫優先模型的edmx文件。 - Following the steps in this MSDN walkthrough,然後我將自動生成的POCO類移動到一個單獨的項目中,並將其稱爲
Sample.Data.Entities
。 - 我再引用的
Sample.Data.Entities
項目在我Sample.Data.Model
項目,所以我的項目成功生成固定所有usings。 - 我當然會需要添加到POCO類,所以我說在
Sample.Data.Entities
項目PartialClasses
文件夾,我的部分類。
然後這是我迷路。在較小的(非n層項目)我的EDMX文件和局部類在同一個項目中,所以我可以只添加我的類對象相關的在我的部分類文件的方法是這樣的:
namespace Sample.Data.Entities
{
public partial class User
{
public string FullName
{
get
{
return string.Format("{0} {1}", this.FirstName, this.LastName);
}
}
}
public User GetUser(int userID)
{
using (var dc = new ProntoEntities())
{
return (from u in dc.Users where u.ID == userID select u).SingleOrDefault();
}
}
}
然後在MVC項目我可以做這樣的事情......
User user = new User();
user = user.GetUser(1);
OR
User user = new User();
user.FirstName = "John";
user.LastName = "Smith";
user.Update();
但是,我不能這樣做,在當前的設置,因爲部分類一無所知的實體。
所以,我的問題是,在我目前的設置中,我把「查詢」的數據?另外,如果我要爲我的MVC項目製作「ViewModels」,那麼應該去哪裏?我通常會把它們放在與我的部分類和edmx文件相同的項目中。
Click to view larger version of image below
你的主要問題是,你試圖實現圍繞_persistence ignorance_圍繞架構_active紀錄_。實體不應該有CRUD職責。這是針對上下文和DbSet的。然後,您可以擁有一個知道DAL(上下文+實體)的服務層,並且可能知道包含視圖模型(或包含視圖模型)的庫。控制器層僅與服務層進行通信。 –