[英]Proper way to use DBCONTEXT Class in MVC
在MVC中我们创建Dbcontext模型
public class Model1 : DbContext
{
public Model1()
: base("DefaultConnection")
{}
public DbSet<SomeObj> SomeObjSet { get; set; }
}
//another model
public class Model2 : DbContext
{
public Model2()
: base("DefaultConnection")
{}
public DbSet<SomeObj2> SomeObjSet { get; set; }
}
那么我们就像使用控制器一样
public class SomeController : Controller
{
private Model1 db1 = new Model1();
private Model2 db2 = new Model2();
public ActionResult Action1()
{
//do sth with Model1 and return
return View(db1.SomeObjSet.ToList());//
}
public ActionResult Action2()
{
//do sth with Model2 and return result
return View(db2.SomeObjSet.ToList());//
}
但我的问题是,通过这种方式,我们正在创建多个DBConnections
。 将两个模型组合成一个模型并为每个控制器设置专用模型是否更好?
但我的问题是,我们不是以这种方式创建多个DBConnections。
不,不要担心。 实体框架(或更具体地说,它所依赖的ADO.NET)处理连接池中的实际数据库连接。 所以不要将DbContext与实际的DbConnection混淆。 这是完全不同的两件事。
实际上,这些类型的场景有标准方式..
具有实体框架的工作单元和通用存储库5
另外,请访问以下文章: 了解和实现ASP.NET MVC应用程序中的存储库和工作单元模式
我正在从第二个链接复制下面的一些文本。
现在想象一下我们在数据库中有多个表的场景。 然后我们需要创建多个存储库,以便将域模型映射到数据模型。 现在有多个存储库类会导致问题。
问题是关于ObjectContext对象。 如果我们创建多个存储库,它们是否应该单独包含它们的ObjectContext? 我们知道同时使用ObjectContext对象的多个实例可能是个问题,所以我们真的应该允许每个存储库包含自己的实例吗?
解决这个问题。 为什么让每个Repository类实例都有自己的ObjectContext实例。 为什么不在某个中心位置创建ObjectContext实例,然后在实例化它们时将此实例传递给存储库类。 现在,这个新类将被称为UnitOfWork,该类将负责创建ObjectContext nstance并将所有存储库实例移交给控制器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.