繁体   English   中英

在MVC中使用DBCONTEXT类的正确方法

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM