与我的模型相关,我应该有多少个 DbContext 子类?

2024-01-23

我正在学习 ASP.NET MVC,但我遇到了一些问题,到目前为止我读过的教程还没有以涵盖我的方式进行探讨。我尝试过搜索,但没有看到任何询问此问题的问题。不过,如果我错过了现有的,请原谅我。

如果我有一个 ASP.NET MVC 应用程序,它有多个模型(其中一些模型相关,一些模型彼此不相关),那么有多少个模型?DbContext如果我想使用,我应该创建子类一个连接字符串 and 一个数据库我的应用程序在全球范围内?

  • 每个模型都有一个上下文?
  • 每组相关模型都有一个上下文?
  • 所有模型的一个上下文?

如果答案是前两个之一,那么我应该记住什么来确保只有one数据库是为整个应用程序创建的吗?我问这个问题是因为,在 Visual Studio 中进行本地调试时,在我看来,它会创建与上下文一样多的数据库。这就是为什么我发现自己使用第三个选项,但我想知道这是否是正确的做法,或者我是否犯了某种错误,以后会回来咬我。


@jrummell 仅部分正确。实体框架将为每个 DbContext 类型创建一个数据库,if你把它留给它自己的设备。使用 @NeilThompson 从 Julie Lerhman 提到的“有界上下文”的概念,您所做的实际上就是告诉每个上下文实际使用相同的数据库。 Julie 的方法使用一种通用模式,以便实现它的每个 DbContext 最终都位于同一个数据库上,但您可以为每个 DbContext 手动执行此操作,如下所示:

public class MyContext : DbContext
{
    public MyContext()
        : base("name=DatabaseConnectionStringNameHere")
    {
        Database.SetInitializer(null);
    }
}

换句话说,朱莉的方法只是设置一个基类,每个上下文都可以继承该基类,自动处理这一部分。

这会做两件事:1)它告诉您的上下文使用特定的数据库(即与其他所有上下文相同),2)它告诉您的上下文禁用数据库初始化。最后一部分很重要,因为这些上下文现在基本上被视为数据库优先。换句话说,您现在没有上下文可以真正导致创建数据库,或者发出需要发生迁移的信号。结果,你实际上需要another“主”上下文将包含应用程序中的每个实体。不过,除了创建迁移和更新数据库之外,您不必使用此上下文进行任何其他操作。对于您的代码,您可以使用更专业的上下文。

关于专用上下文要记住的另一件事是,每个上下文的每个实例都代表一个unique即使他们共享实体。例如,一个Cat来自一个上下文的实体是not与a相同的事情Cat来自第二个上下文的实体,即使它们共享相同的主键。如果您检索到,您将收到错误Cat从第一个上下文中更新它,然后尝试通过第二个上下文保存它。该示例有点人为,因为您不太可能在两个不同的上下文中显式地拥有相同的实体,但是当您进入外键关系等时,遇到此问题的情况要普遍得多。即使您没有明确声明DbSet对于相关实体,如果上下文中的实体依赖于它,EF 将隐式创建一个DbSet为了它。所有这一切都是说,如果您使用专门的上下文,您需要确保它们真正专门化并且存在zero任何级别的相关项目的交叉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与我的模型相关,我应该有多少个 DbContext 子类? 的相关文章

  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp
  • Log4net不会将日志写入日志文件

    我使用 Log4net 创建了一个简单的场景 但我的日志附加程序似乎不起作用 因为消息没有添加到日志文件中 我将以下内容添加到 web config 文件中
  • Linq to 实体使用 `Func` 在生成匿名对象的 select 语句中创建属性

    我正在使用 linq to 实体开发一种简单的文本搜索方法 我想在几个地方重用该方法 看起来有点像这样 IQueryable
  • 在操作之外执行异步操作 asp.net mvc

    我希望能够在每个请求上从云数据库加载用户 并使用 asp net mvc 在控制器中的请求上提供该用户 问题是当前框架不支持从操作过滤器执行异步操作 所以 OnActionExecuting OnAuthorization 方法不允许我这样
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • 如何使用自定义 DbFunction 将字符串转换为小数

    我有一个将小数 和其他类型 保存为字符串的表 我想在数据库上下文上编写一个 Linq 查询 该查询将转换为数据库转换而不是本地转换 出于性能原因 This 非工作的example 从概念上讲是我想要实现的目标 using var conte
  • 使用post方法将多个参数发送到asp.net core 3 mvc操作

    使用 http post 方法向 asp net mvc core 3 操作发送具有多个参数的 ajax 请求时存在问题 参数不绑定 在 dot net 框架 asp net web api 中存在类似的限制 但在 asp net mvc
  • 单个控制器站点的 ASP.NET MVC 路由

    我正在尝试创建一个简单的网站 基本上它有一个控制器Home控制器 该控制器有一个动作Index需要一个string作为参数 这是一个目录 并使用该 目录 来完成其工作 我不知道如何创建一个通用的捕获所有路由 将每个 URL 发送到此一个操作
  • 在 MVC 4 中的另一个表单中验证 JQuery UI 模式表单

    我在 MVC 4 中有一个表单 其中包含多个字段 根据组合的值 我需要打开一个模式对话框表单并加载到这 3 个附加字段中 这些字段将影响我正在创建的同一实体 在主窗体中进行编辑 对于这个模式对话框 我使用的是 jQuery UI 中的对话框
  • 实体类型处于“影子状态”意味着什么?

    在我的 ASP NET Core 1 0 MVC6 EF7 Web 应用程序中 我添加了一个迁移 该迁移添加了新的相关表 和相应的模型 我有以下模型快照 DbContext typeof ApplicationDbContext parti
  • 无法加载文件或程序集“System.Web.Razor”或其依赖项之一

    我在我的网站 Web 应用程序 中使用了 Umbraco 4 11 6 我的网站在 localhost 中工作 通过 Visual Studio 2012 和 IIS v7 进行测试 但是当我从互联网空间运行它时 出现错误 错误是 无法加载
  • PL/SQL 过程:如何返回 select 语句?

    我想创建一个存储过程 on ORACLE数据库服务器我的问题是 我不知道如何返回 select 语句 这是程序中应包含的逻辑 输入参数 过滤器1 int 过滤器2 字符串 with cte as select val1 val2 stdde
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • 实体框架、LinqToSQL 和 sql 注入

    完全使用 Linq To SQL 或实体框架的项目是否有可能遭受 SQL 注入 我认为这可能不是因为 ORM 生成的 SQL 应该是免 SQL 注入的 但我不确定 当您按预期使用这些框架时 即直接使用实体 表 那么就不会 所有字符串比较 即
  • EntityHydrate 任务失败

    我最近安装了 Visual Studio 11 Beta 和 Visual Studio 2010 之后 我无法在 Visual Studio 2010 中构建依赖于 PostSharp 的项目 因此我卸载了 Visual Studio 1
  • .edmx 文件的用途是什么?

    edmx 文件的用途是什么 阅读 CSDL SSDL 和 MSL 规范 在我看来 edmx 文件仅在设计时使用 我们打算将它与其他 edmx 一起分发吗 看来我们需要分发 ssdl 和 或 csdl 文件 EDMX 是 Visual Stu
  • ASP.NET MVC - 用于管理的区域还是单独的 Web 应用程序?

    到目前为止我一直在使用MVC Area为了行政我的 mvc 应用程序的一部分 但最近我开始重新思考这个问题由于每个应用程序不能有多个表单身份验证配置 这已经成为一个问题 因为在最近的一个项目中 我想将身份验证 cookie 设置为不会对用户
  • 在 MVC API 中使用 Microsoft Azure Active Directory 验证 OAuth 2.0 不记名令牌时出现 401

    我正在写一个MVC 中的 API 服务 没有视图 只有 API 我想使用通过 client credentials 流获取的 OAuth 2 0 令牌 两条腿的 OAuth 我创建了一个Azure 管理门户中的 ActiveDirector
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重

随机推荐