簡體   English   中英

MVC存儲庫模式:創建模型類

[英]MVC Repository Pattern: Creating Model Classes

回顧Conery的店面,我不明白為什么他使用了Linqs自動生成的類(即Order類),然后他定義了另一個不是部分類的Order類。 使用存儲庫模式時應該手動創建類,並完全忽略Datacontext嗎?

Rob在他的一個節目中回答了這個問題。

他使用POCO類來了解所有數據訪問類。 例如,當他將LINQ-to-SQL更改為NHibernate時,他需要在他的過濾器中更改他的“映射”,並且他不必對業務邏輯進行任何更改。

如果不使用中間類將前端與linq類分離,則無法使用數據上下文控制垃圾收集。 通常使用數據上下文類型的實例,您希望在使用它們后立即將其刪除。 以下是使用linq to sql上下文執行此操作的方法:

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    return thing;
}
... the MyDataContext instance is gone

使用“using”塊,您將在最后一個“}”處理MYDataContext的實例。 但是,如果你這樣做,你會得到一個錯誤,然后嘗試使用“東西”,因為數據上下文實例已經消失。 如果你處理數據上下文,它會一直閑逛,直到它最終被垃圾收集。

如果您引入一個中間類來將linq與sql代碼從調用應用程序分離,您仍然可以擺脫數據上下文實例並返回相同的數據(僅在不同的對象中):

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    SometThingElse otherThing = ConvertSomethingToSomethingElse(thing);
    return otherThing;
}
... the MyDataContext instance is gone

希望有所幫助。

他在最近的一個視頻中說,他不喜歡LINQ to SQL映射的方式。 我同意,但我認為這是完全矯枉過正的。

我會說,只要您堅持使用存儲庫模式本身,就不會破壞任何主要的設計模式。 我認為選擇2套課程是一個選擇問題,但仍然是一個選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM