动态组装模型的 Code First 迁移

2024-01-08

我的数据库模型(有时称为“context“)在启动时根据安装的服务和/或插件动态组装。插件和服务通过我的 IoC 容器导出它们的模型定义片段,应用程序核心会在启动时拾取它们并运行它们。DbContext.OnModelCreating方法被调用。

问题是:我可以(以及如何)通过此设置使用 Code First 迁移?
(下面是有关我尝试过的内容以及具体问题的更多信息)

在我之前的项目中,数据库是从一些旧代码继承的,因此我们无论如何都无法使用任何 Code First 数据库生成内容。我们只是保留了一长串增量脚本,并在部署时手动执行它们(这是一个单主机类型的项目)。

现在我正在开始一个新项目,这一次,数据库是全新的,可供 Code First 使用。最初,我对 Code First 迁移感到非常兴奋,这似乎是一条可行的道路。直到我真正尝试过。很明显,由于缺乏明确定义,最初的尝试失败了DbContext在我的项目中。

到目前为止,看起来唯一可行的选择是手动编码迁移,我对此非常满意。然而,事实证明这并不只是创建几个继承自的类那么简单DbMigration.

经过对一个小型测试项目的一些实验后,我发现迁移自动生成器添加了一个实现IMigrationMetadata,除其他外,其中包含我的模型的哈希值作为Source and Target特性。据推测,该散列随后用于识别从数据库的“当前”状态(如记录在__MigrationHistory表)到代码中模型定义的最新状态。这完全有道理,但是……

当然,我不知道从哪里获取模型的哈希值,这使我无法实现IMigrationMetadata关于我的迁移。

另一方面,我看到元数据接口不包含在DbMigration类本身,这让我认为它可能是可选的。由此可见,迁移实际上可以在没有哈希值的情况下进行,但问题是 - 如何进行?

我在互联网上找到的所有信息都只是简单、非常基础的教程。没有有关如何手动创建迁移(以及是否支持)的信息。没有关于它实际如何工作以及如何扩展它的文档。而且从外面看也不是很明显。
我现在准备诉诸 ILSpy,但整个 EF 非常复杂,我担心我可能无法在合理的时间内找到我需要的东西。


您可以将以下一些想法汇总起来,找到适合您的解决方案。我意识到我在其他线程中提到了其中一些内容,但我将它们放在这里供其他人阅读这个问题。

  • 自动迁移 http://msdn.microsoft.com/en-us/data/jj554735允许 Code First 自动计算并将更改应用到数据库。
  • 您可以编写自己的代码来生成和应用迁移。我写了一个post http://romiller.com/2012/02/09/running-scripting-migrations-from-code/关于应用迁移和迁移脚手架 http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.design.migrationscaffolder%28v=vs.103%29.aspx类将帮助您创建迁移。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态组装模型的 Code First 迁移 的相关文章

  • 优化 LINQ 查询 - 如何缩短执行时间?

    我想知道是否有一个好的方法来优化我的 LINQ 查询 我正在使用类似于以下内容的 LINQ 查询从数据库检索数据 PKs is a list of integers var import context table Where x gt P
  • 实体框架层次结构的代码优先映射

    我有一个看起来像这样的模型 public class Category public string Id get set public string Description get set public Category Parent ge
  • 你能教实体框架识别表达式吗?

    我有一个使用实体框架的搜索功能 您可以搜索的内容之一是日期范围 您可能会说 开始日期位于 SearchStart 和 Search End 之间 使用 linq 语法编写并不困难 但当您有许多不同的日期参数可供搜索时 它可能会变得相当冗长
  • 在实体框架上克隆数据[重复]

    这个问题在这里已经有答案了 我正在创建软件 用户可以在其中基于旧产品创建新产品 现在我需要使用实体框架进行复制 克隆操作 首先我开始这样写 foreach sourcedata1 in table1 create new table cop
  • 好的实体框架示例应用程序? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一些使用实体框架的优秀 asp net 示例应用程序 我看到了几个 NorthWind 应用
  • 使用存储过程是一个坏主意吗?

    微软经常提供一些方法 让开发简单琐碎的事情变得容易 EFxx 中有一些我不喜欢的东西 首先也是最重要的 为了进行更新 您需要首先加载记录 因此该操作变成了一个两步过程 您可能只想更新一个布尔值 其次 我喜欢存储过程 因为我可以在同一个连接调
  • EF Core 模型构建约定

    在 EF6 中 可以在模型构建期间根据属性类型定义约定 就像这样 public interface IEntity Guid Id get public class MyEntity IEntity public Guid Id get s
  • 如何使用实体框架 Fluent API 配置多对多关系

    我试图首先在 EF 代码中建立多对多关系 但默认约定是错误的 以下类描述了这种关系 class Product public int Id get set public string Name get set class Account p
  • 查找/更新中的 EF 4.1 Code First 错误。有什么解决办法吗?是否应该报告?

    我在 EF 4 1 Code First 中发现了一个非常严重的错误 假设我们有这段代码从上下文中检索一个实体 然后用新值更新它 public T Update
  • TransactionScope - 底层提供程序在 EnlistTransaction 上失败。 MSDTC 正在中止

    我们的团队遇到了一个问题 表现为 底层提供者在 EnlistTransaction 上失败 无法访问 已处置对象 对象名称 事务 这似乎是我们一开始使用就出现的交易范围 http msdn microsoft com en us libra
  • 如何检查 EntityTypeConfiguration 实例的成员配置?

    我正在使用 Entity Framework Code First 和继承自 EntityTypeConfiguration 的映射类 我这样做是为了封装我使用 Code First Fluent API 来配置实体的方法 我希望能够检查这
  • 使用实体框架存储库返回多个结果集

    我正在编写一个代码 其中我需要多个表作为存储过程的结果 我正在使用实体框架存储库模式 它返回并绑定一个 IEnumerable 对象 但我需要同时将它与多个 IEnumerable 绑定 有人可以帮忙吗 这是我正在使用的代码 db Data
  • 继承 IdentityUser 我在 UserManager 上收到错误

    我正在使用 NET Framework 4 5 1 和 Asp Net Identity 2 1 0 开发 Web Api 2 2 应用程序 我不确定我在做什么 但我想将我的数据库与 ASP NET Identity 数据库合并 我已经这样
  • 如何为连接范围变量编写动态 where 子句

    我一直在使用 LINQ 进行查询 但遇到了动态 where 子句的问题 我想检查一个条件 如果为真 则将其添加到我的查询中 问题在于 where 正在使用我的连接之一中的范围变量之一 我的工作查询如下 var query from proj
  • 实体框架不将Where子句作为WHERE子句发送到SQL Server

    我有一个包含站点的简单数据库 每个站点都有一堆帖子 我正在尝试获取某个站点的所有 公共 帖子 我有一个名为 site 的变量 它已经是 EF 带来的实例 第一个显而易见的事情是 var posts from post in site Pos
  • 实体框架与oracle数据库的连接

    我使用的是 Entity Framework 6 1 版本和 oracle 11 我是实体框架的新手 任何人都可以建议连接 oracle 的先决条件是什么 任何更改都需要在 web config 中进行 在web config中 默认它是与
  • 实体框架代码优先:如何手动更新数据库?

    我构建了一个小型 WPF 演示应用程序 它使用 EF Code First 将其数据保存在 SQL CE 4 0 DB 中 除非我从模型对象中删除属性 否则它工作正常 例如 如果我从此类中删除 HosteBy public class Di
  • AssociationSet 中的关系处于“已删除”状态

    我正在尝试在我的网站中创建新帖子 但由于某种原因 EF 抛出以下错误 来自 PostAttributeValue Definition 关联集的关系 处于 已删除 状态 给定多重约束 相应的 PostAttributeValue Defin
  • 如何使用 EF Code First 将一张表与多个父项关联

    我正在构建一个域模型 该模型需要多个表才能被多个可能的父表引用 像您可能有一个表来存储注释或文件 并且这些注释和 或文件可以与不同的父实体关联 并不是说同一个 文件 或 注释 可以与多个所有者相关联 而是 文件 表中的 10 行中 其中 3
  • NotSupportedException:LINQ to Entities 无法识别该方法[重复]

    这个问题在这里已经有答案了 我正在尝试使此查询与 EF 一起使用 但它抛出异常 var c ac Communities OrderBy o gt o Posts Count Skip page limit Take limit Selec

随机推荐

  • 防止 CSS 工具提示超出页面/窗口

    我有一个仅 CSS 的工具提示 它加载span作为工具提示 当您hover链接 然而 这是使用 CSS 定位的 但如果链接靠近页面顶部或侧面 则工具提示会离开页面的侧面 顶部 有没有办法使用 css 来进行此更改 或者我必须依赖 JS 我已
  • 从 X 值获取 .NET 图表系列中的 Y 值

    使用 C 和 NET 图表 我正在尝试绘制多个波形图 并且希望将鼠标移过图表区域 并让工具提示在该 X 值位置处显示图表中每个系列的 Y 值 at xValue 12 3 2
  • 在 R 中将 UTM 转换为纬度/经度

    我有一个包含 9 000 多个 UTM 坐标的 csv 文件 我想将其转换为十进制 但遇到了一些麻烦 我搜索了此处和其他地方发布的几篇帖子 但似乎找不到将我的 UTM 集转换为可用且准确的纬度 经度的解决方案 我基本上有两个问题 1 有人看
  • 为什么 R CMD BATCH 中选项的行为不同(error = utils::dump.frames)?

    这是这个问题的后续 R CMD BATCH 或 Rscript 错误停止 https stackoverflow com questions 23327746 r cmd batch or rscript with stop on erro
  • 在 Ubuntu 中不使用 sudo 安装 NodeJS

    我已经关注了节点和 npm in 30 seconds sh https gist github com isaacs 579814 早些时候 我曾经使用 Yeoman 和 Bower 以及 NodeJS 创建 AngularJS 应用程序
  • Meteor:如何判断数据库何时准备就绪?

    我想在页面加载后尽快执行 Meteor 集合查询 我尝试的第一件事是这样的 Games new Meteor Collection games if Meteor isClient Meteor startup function conso
  • 如何修改 ASP.NET 中 div 的代码隐藏文件中的 CSS 样式?

    我正在尝试根据从 aspx 页面代码后面的数据库表中获取的信息来修改 div 的 CSS 样式属性 以下基本上是我想要做的 但我遇到了错误 Aspx div Test div 背后代码 testSpace Style display non
  • WPF 中的动画背景控件?

    在我的 WPF 应用程序中 我想要一个类似于以下的环境动画背景媒体中心 http en wikipedia org wiki Windows Media Center的背景 有没有免费的控件可以提供此功能 使背景动画化的一种方法是 还可以将
  • 在数据框列中查找字典的值并修改它

    我现在处理数据帧和字典 我有一个问题 我有一本字典 Fruits BN Banana LM Lemon AP Apple etc 还有一个数据框 Stock Fruit Price 0 Sweet Mango 1 1 Green Apple
  • Python/请求:requests.exceptions.SSLError:[SSL:SSLV3_ALERT_HANDSHAKE_FAILURE]

    在使用 MacOS X 的 Python 中 尝试向网站发出 POST 请求 但出现以下错误post response session post post url data post payload headers post headers
  • 文本超出 JTextArea

    我正在尝试用 Java 做一些事情 这需要我在 ScrollPane 中有一个 JTextArea 我是这样定义它们的 private JTextArea longestparagraph new JTextArea JScrollPane
  • 我正在为我的团队编写编程思维规则:你的是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 用jQuery实现文件上传进度条

    我正在尝试在我的项目中实现 AJAX 文件上传功能 我为此使用 jQuery 我的代码使用 AJAX 提交数据 我还想实现一个文件上传进度条 我怎样才能做到这一点 有什么方法可以计算已上传的数量 以便我可以计算上传的百分比并创建进度条 我只
  • 使用 SQL 查询统计单词出现次数

    我有两张桌子 Table1 ID SENTENCE 1 The shoes are good shoes 2 There is a tree 3 This is nice nice nice Table2 ID WORD 1 The 1 s
  • 三元组存储和图数据库有什么区别?

    有三元组 语义数据库 也有通用图形数据库 两者都基于通过关系将一个 项目 链接到另一个 项目 的类似概念 Triplestore 支持 RDF 并由 SPARQL 查询 但此类附加组件也可以 并且已经 在通用图形数据库之上实现 使您更喜欢语
  • 如何将 WebDev.WebServer.exe 安装为独立应用程序?

    如何将 Visual Studio Web 开发服务器 WebDev WebServer exe 安装为独立应用程序 这样我们的网页设计人员就可以从 SVN 获取最新的代码 然后运行 MSBuild 批处理文件来构建代码 然后使用 Web
  • 如何使用 Mockito 验证未调用特定方法?

    如何验证一个方法是not调用对象的依赖关系 例如 public interface Dependency void someMethod public class Foo public bar final Dependency d 通过 F
  • 跨进程发送对象在解组时抛出 Class not found

    我正在编码和android应用程序有2个进程 一个显然是处理所有UI事物和其他事物的主进程 另一个进程托管处理网络 套接字 监听和其他事物的服务 为了跨两个进程进行通信 我使用 Messenger 方法 并且在需要发送自定义 java 对象
  • sweetalert2 在同一函数中使用多个 swal

    我想制定一个条件并为每个条件调用一个 swal Sweetalert2 但只有一只天鹅在奔跑 我该怎么做 function validateEmail email var regex S S S return regex test emai
  • 动态组装模型的 Code First 迁移

    我的数据库模型 有时称为 context 在启动时根据安装的服务和 或插件动态组装 插件和服务通过我的 IoC 容器导出它们的模型定义片段 应用程序核心会在启动时拾取它们并运行它们 DbContext OnModelCreating方法被调