Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库优先方法的EF迁移?_C#_Entity Framework_Database Migration - Fatal编程技术网

C# 数据库优先方法的EF迁移?

C# 数据库优先方法的EF迁移?,c#,entity-framework,database-migration,C#,Entity Framework,Database Migration,我们在EntityFramework中使用数据库优先的方法。 我们有几个客户,当我们部署新产品版本时,我们现在使用sqlcompare等工具“手动”应用DB模式更改 是否有一种方法可以帮助EF迁移自动将更改应用于客户数据库?据我所知,EF迁移是针对CodeFirst的产品,不支持数据库优先操作 CodeFirst假定您永远不会手动更改数据库。对数据库的所有更改都将经过代码优先迁移。我认为有!你需要先继续你的代码 为此,假设EF Db首先为您创建了以下DbContext: public class

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


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

据我所知,EF迁移是针对CodeFirst的产品,不支持数据库优先操作


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

我认为有!你需要先继续你的代码

为此,假设EF Db首先为您创建了以下DbContext:

public class MyDbContext : DbContext
{
    public MyDbContext()
        : base("Name=DefaultConnection")
    {

    }

    // DbSets ...
}
将其更改为以下内容,首先开始使用代码和它的所有神奇工具(迁移等):

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

您可能只需要根据您的服务器和其他选项编辑YourDbFileName contr即可


更多信息和。

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

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }
如果您对此发表评论:

throw new UnintentionalCodeFirstException();
那么在迁移操作时不会引发异常。正如您可能想象的那样,迁移寻找这一部分是为了了解每个实体的配置以及一个或多个表


很抱歉,如果我没有提供更多细节,如果您希望了解更多,我将很乐意编辑此内容并使其更好

启动EntityFramework4.1您可以执行的操作

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


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

当然,我不想失去任何东西,代码优先迁移功能似乎可以保留数据,我希望数据库优先使用类似的功能。事实上,我希望在简单的场景中使用此选项—添加新表、新字段等。如果您希望先使用数据库实现EF迁移的类似功能,请查看一个好的替代方案,可能是数据库项目/SSDT并进行模式比较。请参阅tatigoIt的答案—SQlite数据库的情况相同?这不适用于SQlite。出现错误:
System.NotSupportedException:不支持创建DbModelBuilder或从使用数据库优先或模型优先创建的DbContext写入EDMX。EDMX只能从未使用现有DbCompiledModel创建的Code First DbContext中获取。
throw new UnintentionalCodeFirstException();