1

在 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());// 
        }

但我的问题是,以这种方式我们正在创建 Multiple DBConnections。将这两个模型组合成一个模型并为每个控制器提供一个专用模型是否更好?

4

2 回答 2

4

但我的问题是,我们不是这样创建多个 DBConnections 的。

不,别担心。实体框架(或更具体地说,它所依赖的 ADO.NET)处理连接池中的实际数据库连接。所以不要将 DbContext 与实际的 DbConnection 混淆。这是两个完全不同的东西。

于 2013-09-05T11:29:45.743 回答
1

实际上,这些类型的场景有标准方法..
实体框架 5 的工作单元和通用存储库

另外,请访问这篇文章:在 ASP.NET MVC 应用程序中理解和实现存储库和工作单元模式

我正在从第二个链接复制下面的一些文本。

现在想象一下我们在数据库中有多个表的场景。然后我们需要创建多个存储库,以便将域模型映射到数据模型。现在有多个存储库类会带来问题。

问题在于 ObjectContext 对象。如果我们创建多个存储库,它们是否应该分别包含它们的 ObjectContext?我们知道同时使用 ObjectContext 对象的多个实例可能是一个问题,那么我们真的应该允许每个存储库包含它们自己的实例吗?

来解决这个问题。为什么要让每个 Repository 类实例都有自己的 ObjectContext 实例。为什么不在某个中心位置创建 ObjectContext 的实例,然后在实例化它们时将此实例传递给存储库类。现在这个新类将被称为 UnitOfWork,这个类将负责创建 ObjectContext 实例并将所有存储库实例移交给控制器。

于 2013-09-05T11:32:57.467 回答