EF数据库迁移优先方法
本文关键字:方法 迁移 数据库 EF | 更新日期: 2023-09-27 18:24:09
我们在EntityFramework中使用数据库优先的方法。我们有几个客户,当我们部署新的产品版本时,我们现在使用SQL Compare
等工具"手动"应用DB模式更改。
有没有一种方法可以帮助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();
则不会在迁移操作中引发异常。正如您可能想象的那样,迁移会查找这一部分,以了解具有一个或多个表的每个实体的配置。
很抱歉,如果我没有提供更多细节,如果你希望更多,我很乐意编辑它,让它变得更好!