繁体   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