1

我應該在的情況下使用什麼樣的模式進行數據訪問的VS2008生成的L2S或EF DataModels?存儲庫模式還是什麼?我們知道VS2008在同一個文件中生成Data-Models和DataContexts/ObjectContexts,那麼,我應該如何安排我的VS2008程序集來實現分層設計?安排VS2008生成組件LinqToSql /的EntityFramework數據模型/上下文

如果我使用存儲庫模式,我應該怎麼安排我在VS2008的解決方案組件(如數據模型和數據/對象上下文被存儲在同一個文件)?

任何網絡/示例鏈接,將不勝感激。

回答

1

我做什麼是我自己的自定義類,它實現了存儲庫模式包裝(在我的情況LINQ2SQL),這裏是從以前的,但有些相關答案粘貼的摘錄。

我建議通過The Onion Architecture閱讀和尋找靈感的MVC StoreFront視頻。神奇的一點是,將Linq2Sql部分或者EF東西推到一邊,所以你不要把它放在最前面,如果你需要的話,可以使用Linq2Sql或者EF或者NHibernate。這是更多的工作,但給你更多的靈活性。

這裏是我的榜樣CarProject

在Car.Core項目

public interface ICarRepository 
{ 
    IQueryable<Car> GetAllCars(); 
    void Add(Car); 
} 

然後我有它封裝了訪問所產生的LINQ2SQL類接口的實現。

Car.Data項目

public class SqlCarRepository : ICarRepository 
{ 
    private CarDataContext _context; 

    public SqlCarRepository() 
    { 
     _context = new CarDataContext(); 
    } 

    #region ICarRepository Members 

    public IQueryable<Car> GetAllCars() 
    { 
     return _context.Cars; 
    } 

你可以有一個EF equivilent ofcourse,或NHibernate的。

我沒有得到這一切完全排序,我還在學習,但是我現在有這些項目:

Car.Core   --- All the interfaces and domain objects, DTO's etc 
Car.Core.Tests --- The tests of the core business logic. 
Car.Web   --- Asp.net MVC frontend 
Car.Web.Tests --- Tests for the website 
Car.Data   --- The Linq2Sql stuff lives in here 
Car.Data.Tests --- The tests for the DAL layer 

在您的情況,你可以要麼把EF在Car.Data或可能改變Car.Linq2Sql和Car.EntityFramework。不知道我會怎麼做。

1

在我的實體框架的項目,我已經把所有的自動生成的代碼,因爲它是和擴展一些自動生成更具體的功能部分類(我有時轉換自動的對象生成的類來我的項目類)。

我認爲模型和它的一些擴展應該在一個程序集中。您可以擁有不同的類,這些類將以不同的方式保存數據 - 並且它們應該位於DataModel程序集將引用的其他程序集中。

也許我沒有看到正確的問題。如果你想,嘗試並進一步解釋你想達到的目標。

+0

如果我想我的C#程序集分成3層(數據訪問,POCO和UI,但是還是你喜歡它),實體框架的自動生成的模型帶不來太多的幫助。 Coz,模型和數據訪問代碼駐留在同一個地方。那麼你的答案是什麼?如果您瞭解NHibernare,您可以瞭解到,NHibernate強烈支持存儲庫模式,通過它可以非常容易地將應用程序分成三層。如果EF的自動生成代碼的情況下,我可以找到沒有明確的方式來使用Repository模式。或者,如果你喜歡,你可以爲我推薦任何其他DA模式。 – anonymous 2010-05-09 08:43:27

+0

您可以將實體框架的自動生成視爲DataAccess,編寫一個不同的程序集,該程序集將包含用於UI的POCO零件和一個不同的程序集。 您不必將自動生成的類視爲您的POCO。請記住,它們通常不會完全符合您的程序所需,因爲它們太自動。 – brickner 2010-05-09 12:13:52