【问题标题】:Entity Framework Core Update Database - Code First Approach Without Migration实体框架核心更新数据库 - 无需迁移的代码优先方法
【发布时间】:2020-02-16 12:59:00
【问题描述】:

我一直在寻找一种方法,它可能还支持也可能不支持,我想我正在寻找一个具体的答案。

我一直在寻找的是满足以下要求的解决方案:

  • EFCore 代码优先方法
  • 现有数据库表中已有大量数据
  • 通过更新我的模型将几列添加到所述数据库表中
  • 无需通过 PM 控制台进行迁移,只需在应用程序启动时将 Context 与 Fluent Api 一起使用
  • 不重新创建数据库
  • 方法可以是:检查配置文件或某种形式,将其与数据库中版本表中的版本进行比较以触发更新
  • 项目模板:Web Api 2、Uwp

如果支持,是否可取?如果不是,为什么?有什么缺点?

根据我参与的项目的经验,无论是数据库优先方法还是代码优先但使用数据库重建。

我想到的步骤是: - 更新模型 - 创建迁移对象 - 更新 db 版本的配置文件 - 在应用程序启动时,根据版本表检查配置版本 - 如果版本与调用 Update() 或 Migrate() 或两者不匹配,则使用迁移对象/类型作为参数

【问题讨论】:

  • 您应该做的是在您现有数据库的模型中创建所有内容。伪造迁移表信息。然后添加任何迁移以修改您的数据库。
  • 那么您真的需要迁移吗?这些都不能在应用程序启动或类似的情况下实现?
  • 您可以在启动时调用迁移。
  • 感谢您的链接,我会尝试这些,但我记得我已经这样做了,但会再试一次。但这应该适用于 Uwp 和 Web api 2,对吧?

标签: c# entity-framework-core asp.net-web-api2


【解决方案1】:

这是相当基于意见的,但这是我的 cmets。

EFCore 代码优先方法

您是否了解 EF Core 的限制?它的 linq 提供程序无法完成 EF6 所做的一切。 differences between EF and EF Core?

现有的数据库表已经存在大量数据

没关系。

通过更新我的模型向所述数据库表添加几列

这似乎是 EF(核心)应用的标准做法。

无需通过 PM 控制台进行迁移,只需在应用程序启动时将 Context 与 Fluent Api 一起使用

我不推荐自动数据库升级,因为迁移的风险不是在你想要的时候完成。我称之为意外升级数据库。

没有数据库重建

我不确定这意味着什么,但是是的,EF(核心)可以在不重新创建数据库的情况下工作。

方法可以是:检查配置文件或某种形式,将其与数据库中版本表中的版本进行比较以触发更新

项目模板:Web Api 2、Uwp

Uwp 部分似乎无关紧要,因为我假设所有数据库访问都将通过 api 应用程序完成。

【讨论】:

  • 谢谢!这是有见地的。是的,我知道 efcore 与 ef6 相比存在限制,必须重新检查这些限制。我提到的项目模板可能无关紧要,可能更多仅供参考,因为我有一个单独的数据访问库。我会删除标签。
  • 嗨@NicoZhu-MSFT,不是真的,但这个答案很有帮助。我想我在问一个模糊的问题。让我再试一次,我想为我的数据访问提供一个解决方案,以便在我将属性添加到我的模型时自动更新我的数据库,为什么是自动的?因为我不想在我的解决方案中包含迁移历史。我知道存在自动迁移,但即使是一个简单的项目也没有成功,也许我没有找到我正在寻找的正确指南。但根据 tymtam 的回答,不推荐自动 db-upgrade。无论如何,这只是我在处理个人项目时的一个想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2013-12-29
相关资源
最近更新 更多