MVC存储库模式:创建模型类

时间:2009-01-10 06:46:11

标签: asp.net-mvc model-view-controller repository-pattern

回顾Conery的店面,我不明白他为什么使用Linqs自动生成的类(即Order类),然后他定义了另一个不是分部类的Order类。使用存储库模式时应该手动创建类,并完全忽略Datacontext吗?

3 个答案:

答案 0 :(得分:3)

Rob在他的一个节目中回答了这个问题。

他使用POCO类来了解所有数据访问类。例如,当他将LINQ-to-SQL更改为NHibernate时,他需要在他的过滤器中更改他的“映射”,并且他不必对业务逻辑进行任何更改。

答案 1 :(得分:3)

如果不使用中间类将前端与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代码从调用app分离,你仍然可以摆脱你的数据上下文实例并返回相同的数据(只是在不同的对象中):

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

希望有所帮助。

答案 2 :(得分:2)

他在最近的一个视频中说,他不喜欢LINQ to SQL映射的方式。我同意,但我认为这是完全矫枉过正的。

我认为只要您坚持使用存储库模式本身,就不会破坏任何主要的设计模式。我认为选择两套课程是一个选择问题,一个是坏课程,仍然是一个选择。