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



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

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

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

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

我还有下面的控制器类,它启动上面的存储库和另一个API存储库类,如下所示:-

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

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

public class APIRepository
    {
        Repository repository = new Repository();

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

  1. 它直接启动repository类,repo类在其中启动MyEntities()
  2. 它启动APIrepository类,其中APIrepo类启动存储库类

所以现在当我调用repositoty时。是否在操作方法中保存()?它将实体对象保存在存储库中吗;在API存储库中?或者用户会话将管理两个独立的上下文对象?他们彼此不干涉?

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

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

相关内容

最新更新