【问题标题】:How to combine both of code first and database first approaches如何结合代码优先和数据库优先方法
【发布时间】:2019-08-26 11:35:19
【问题描述】:

假设我是一家公司的新开发人员。因此,该项目已经有一个现有的数据库。要处理这个项目,显然我需要搭建现有的数据库(数据库优先方法),它可以生成模型类供我处理。

所以我开始处理项目并想在表中添加一个新列,所以我在模型类上添加了一个新属性,然后我想在数据库中应用这个更改。所以我通过添加新的迁移和更新数据库切换回代码优先方法。

但问题是,如果我添加一个新的迁移,EF 会在迁移的 UP 方法中包含所有数据模型类,以在数据库中创建所有对应的表,因为 EF 认为所有模型类都是我新添加的。那么如何只通过添加新列来更新表而不重新创建所有其他表呢?

【问题讨论】:

  • 第一个问题是您是否应该开始使用迁移。就我个人而言,我对分别修改数据库模型和类模型非常满意。

标签: entity-framework ef-code-first entity-framework-core ef-database-first


【解决方案1】:

1) 从现有数据库中对模型和数据库上下文进行逆向工程。请点击此链接,https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

2) 现在你有了模型和数据库上下文。您的数据访问应该可以在新上下文中正常工作,迁移除外。

3) 现在您已经创建了数据库和表,您需要调整您的数据库以假装当前架构是使用迁移创建的。

3.1) 首先创建初始迁移Add-Migration IntitialCreate。它将有代码来创建当前级别的数据库。

3.2) 现在你应该手动创建 __MigrationHistory 表并手动将 IntialMigration 插入到表中,这样它就不会再次尝试应用它。如果您发现很难手动执行此操作,则有窍门。

只需更改连接字符串中的数据库名称并执行update-database,即可使用当前迁移创建一个新数据库。在创建的新数据库中,__MigrationHistory 表应该在已经应用 InitialCreate 迁移的情况下创建。与数据一起生成创建脚本并在原始数据库中执行。

4) 现在您可以对模型进行其余的更改,创建新的迁移并照常应用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多