我们正在使用Database First方法和EntityFramework。
我们有几个客户,当我们部署新产品版本时,我们现在使用SQL Compare
等工具“手动”应用数据库架构更改。
EF迁移有助于自动将更改应用于客户数据库吗?
答案 0 :(得分:19)
据我所知,EF Migrations是针对CodeFirst的产品,不支持Database First操作。
CodeFirst假设您永远不会手动对数据库进行任何更改。对数据库的所有更改都将通过代码首次迁移。
答案 1 :(得分:4)
我觉得有!您需要先完成代码。
为此,假设您拥有EF Db首次为您创建的以下DbContext:
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的情况下使用SQL Express创建一个新的连接字符串,就像早期的DefaultConnection Db首次创建一样。
您可能需要继续使用,是根据您的服务器和其他选项编辑YourDbFileName ConStr。
答案 2 :(得分:2)
启动Entity Framework 4.1,您可以执行Code First Migrations with an existing database。
首先,您拥有数据库,创建模型,启用迁移。
最重要的是要记住,在对模式进行任何更改之前,应该运行Enable-Migrations,因为它应该在您的数据库和代码之间保持同步。
答案 3 :(得分:0)
只需查找您的DbContext子对象并查找此方法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
如果您对此发表评论:
throw new UnintentionalCodeFirstException();
然后不会在迁移操作上抛出异常。正如您可能想象的那样,迁移查找此部分以了解具有哪些表或表的每个实体的配置。
很抱歉,如果我没有提供更多详细信息,如果您希望了解更多信息,我将很乐意对此进行编辑并使其更好!