c# - Entity Framework和MVC在业务层或数据访问层创建DbContext

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

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

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

上下文来自业务层的情况如下:

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 工作模式单元”。

http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application1

基本上,它是汇集多个存储库/表的中心位置,因此您可以在不处理上下文的情况下对多个存储库进行操作。您不必完全按照所示使用它。您可以修改它以满足您的需要。

关于c# - Entity Framework和MVC在业务层或数据访问层创建DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15671024/

相关文章:

c# - DbContext 只是我的数据库在内存中的架构或架构和记录

c# - 在安装期间更改 App.config

c# - 使用拥有的类型时,Entity Framework Core 尝试连接到不存在的表

asp.net-mvc - RazorEngine.Text.RawString 不适用于常规 MVC 部分 View

c# - 如何在 ASP.Net MVC 中将类的值从 View 传递到 Controller

entity-framework - Entity Framework EntityKey/外键问题

C# 在 WebBrowser 中调用 JavaScript

c# - 在 C# 中将字符串转换为 boolean 值

asp.net-mvc - 如何将其他表单数据与 MVC 文件上传一起传递?

entity-framework - Entity Framework SaveChanges 不保存数据