[英]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.