asp.net mvc如何处理在另一个DBContext对象中启动的DBcontext对象

时间:2016-03-24 15:55:36

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我正在使用asp.net mvc-4 web应用程序,我正在使用实体框架5.0。现在我使用ado.net实体框架映射了我的数据库表,该框架生成了一个.edmx文件和DBContext类。

现在我不确定asp.net mvc如何处理以下情况: -

我有一个直接与数据库实体交互的存储库模型类,如下所示: -

smartdrag

此外,我还有以下Controller类,它启动上述存储库和另一个API存储库类,如下所示: -

public class Repository
{

        private MyEntities my = new MyEntities();
 public void Save()
        {
            my.SaveChanges();
        }

APIRepositoty还启动了存储库,如下所示: -

        public class ServerController : Controller
         {
           Repository repository = new Repository();
           APIRepository APIrepository = new APIRepository();
           //code goes here
           Public ActionResult Create(Emp e)
             {
               //code goes here..
               var result = APIreposioty.SendCall(...); 
               repository.Save();
             }

所以现在在我的控制器类中我有以下内容: -

  1. 它直接启动存储库类,其中repo类启动MyEntities()。
  2. 启动APIrepository类,其中APIrepo类启动存储库类。
  3. 所以现在当我在action方法中调用repositoty.Save()时?它会将实体对象保存在存储库中吗?在API库中?或者用户会话将管理两个单独的上下文对象?他们互不干涉?

1 个答案:

答案 0 :(得分:1)

您的控制器最终会创建实体上下文的不同实例。他们不受任何约束。保存其中一个只会保存已加载/注册为添加的实体。由另一个处理的实体将不会被保存。

对于您的情况,处理的常用模式是使用依赖注入。将其配置为仅为每个控制器实例化一个DBContext,无论控制器使用多少个存储库(直接或通过其他依赖项)。