EF数据库迁移优先方法

本文关键字:方法 迁移 数据库 EF | 更新日期: 2023-09-27 18:24:09

我们在EntityFramework中使用数据库优先的方法。我们有几个客户,当我们部署新的产品版本时,我们现在使用SQL Compare等工具"手动"应用DB模式更改。

有没有一种方法可以帮助EF迁移自动将更改应用到客户数据库?

EF数据库迁移优先方法

据我所知,EF Migrations是一款针对CodeFirst的产品,不支持数据库优先操作。

CodeFirst假设您永远不会手动对数据库进行任何更改。对数据库的所有更改都将经过代码优先迁移。

我觉得有!您需要先继续执行代码。

要做到这一点,假设您有以下DbContext,EF Db首先为您创建:

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("Name=DefaultConnection")
    {
    }
    // DbSets ...
}

将其更改为以下内容,以便首先开始使用代码及其所有神奇工具(迁移等):

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("YourDbFileName")
    {
    }
    // DbSets ...
}

这导致EF在web.config文件中的本地计算机上使用SQL Express创建一个名为YourDbFileName的新连接字符串,类似于早期创建的DefaultConnection Db。

你可能需要继续你的方式,就是根据你的服务器和其他选项编辑YourDbFileName ConStr。

更多信息请点击此处。

启动实体框架4.1时,您可以对现有数据库执行代码优先迁移。

因此,首先要有数据库,创建模型,启用迁移。

最重要的是要记住,在对架构进行任何更改之前,您应该运行EnableMigrations,因为它应该在数据库和代码之间同步。

只需查找DbContext子对象并查找此方法:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

如果您对此发表评论:

throw new UnintentionalCodeFirstException();

则不会在迁移操作中引发异常。正如您可能想象的那样,迁移会查找这一部分,以了解具有一个或多个表的每个实体的配置。

很抱歉,如果我没有提供更多细节,如果你希望更多,我很乐意编辑它,让它变得更好!