如果我的问题是正常的,我很抱歉。但我见面的时候我使用实体框架5.实体框架5:使用延迟加载或热切加载
如果让我选择预先加载设计我的ASP.NET MVC 4.0应用这个问题,我只是简化使用:
public Problem getProblemById(int id) {
using(DBEntity ctx = new DBEntity())
{
return (Problem) ctx.Posts.Find(id);
}
}
但是,如果使用预先加载,我会遇到问题:当我想浏览其所有属性,如评论(问题),用户(问题)......我必须手动使用Include
来包含这些属性。有时候,如果我不使用这些属性,我会失去表现,也许我失去了实体框架的力量。
如果我使用Lazy Loading。有两种方法可以使用DBContext
对象。第一种方式是在本地使用的DbContext对象:
public Problem getProblemById(int id) {
DBEntity ctx = new DBEntity();
return (Problem) ctx.Posts.Find(id);
}
利用这一点,我想会遇到内存泄漏,因为CTX将永远不会再处理。
第二种方法是使的DbContext对象的静态和全球使用它:
static DBEntity ctx = new DBEntity();
public Problem getProblemById(int id) {
return (Problem) ctx.Posts.Find(id);
}
我看了一些博客,他们说,如果我用这种方式,我必须控制并发访问(因为多请求发送到服务器)由我自己,OMG。例如此链接:
Entity Framework DBContext Usage
那么,怎样才能设计出我的应用程序,请帮我找出。
谢谢:)
因此,如果我使用延迟加载。我如何设计我的应用程序以使用DBContext对象?谢谢:) – hqt
我看到很多帖子(包括MSDN链接),建议不要使用延迟加载。所以,为什么微软仍然有这样的选择程序员:(他们不作任何改变,使其更容易使用:(): – hqt
@hqt使用延迟加载或不会改变你使用DBContext本身的方式;你会仍然需要找到一种方法来为每个用户请求创建一个新的实例,一个简单的方法是在每个控制器的构造函数中实例化DBContext,并将其传递给业务层,一种更健壮的方法是使用IoC框架自动请参阅http://www.codeproject.com/Articles/70061/Architecture-Guide-ASP-NET-MVC-Framework-plus-N-ti例如 – ken2k