Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架和MVC在业务层或数据访问层创建DbContext_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 实体框架和MVC在业务层或数据访问层创建DbContext

C# 实体框架和MVC在业务层或数据访问层创建DbContext,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我对Entity Framework和.NET不熟悉,正在开发一个MVC4应用程序。我想我对应该在哪里创建数据库上下文实例有点困惑。在我的应用程序中,我有几个层次:Web、业务、数据访问、数据库(这些都是独立的项目)。在数据访问层,每个表有一个类。我看到的一个示例显示了在数据访问层中的每个方法中创建上下文(我可能误解了它)。当作为业务逻辑的一部分更新多个表时,这似乎不太实际。在每个数据访问层方法内创建新上下文的结果似乎是这样的错误:在更新多个表时,entity对象不能被多个EntityChang

我对Entity Framework和.NET不熟悉,正在开发一个MVC4应用程序。我想我对应该在哪里创建数据库上下文实例有点困惑。在我的应用程序中,我有几个层次:Web、业务、数据访问、数据库(这些都是独立的项目)。在数据访问层,每个表有一个类。我看到的一个示例显示了在数据访问层中的每个方法中创建上下文(我可能误解了它)。当作为业务逻辑的一部分更新多个表时,这似乎不太实际。在每个数据访问层方法内创建新上下文的结果似乎是这样的错误:
在更新多个表时,entity对象不能被多个EntityChangeTracker实例引用

那么,可以在业务层方法中创建上下文,然后将其传递给数据访问层方法吗?还是有更好的方法

类似于这样的情况,上下文来自业务层:

public User RetrieveUserById(int id, MyDbContext ctx)
    {            
        User findUser = ctx.Users.Find(id);
        return findUser;
    }
不是在数据访问层方法内创建上下文,而是:

public User RetrieveUserById(int id)
    {
        var ctx = new MyDbContext();
        User findUser = ctx.Users.Find(id);
        return findUser;
    }

我感谢你的帮助

数据访问层。创建与DbContext一起存在于数据层中的“工作单元”类。 尝试搜索“Asp.net工作单元模式”


基本上,它是汇集多个存储库/表的中心位置,这样您就可以在不处理上下文的情况下处理多个存储库。您不必完全按照所示使用它。你可以根据需要修改它。

我明白你的意思。我刚刚创建了一个单独的项目,其中包含用于对EF生成的实体执行CRUD操作的类。所以EF为每个表生成一个类,然后我为每个表创建一个类来执行CRUD操作。这不是一个好主意吗?从你如何描述你的方法来看,这更像是一种回复模式。orm负责dal和映射器。