具有代码优先迁移的实体框架多个项目
Posted
技术标签:
【中文标题】具有代码优先迁移的实体框架多个项目【英文标题】:Entity Framework multiple projects with code first migrations 【发布时间】:2014-04-09 09:23:24 【问题描述】:我有一个名为“Core”的类库项目,它定义了带有通用类属性的 CoreContext:
public class CoreContext : DbContext
public DbSet<User> Users get; set;
public DbSet<Role> Roles get; set;
public DbSet<UserContactInfo> UserContactInfos get; set;
... more common properties ...
然后我有多个项目引用“Core”项目并定义继承CoreContext的新上下文:
项目1:
public class Project1Context : CoreContext
public DbSet<Foo> Foos get; set; //object defined in Project1
项目2:
public class Project2Context : CoreContext
public DbSet<Bar> Bars get; set; //object defined in Project2
当我在 Project1Context 中更改某些内容时,我会在 Project1 中创建一个新的迁移,这没问题,
但是如果我在核心项目中更改某些内容,比如说将属性 Company
添加到 UserContactInfo
我将不得不去 Project1 和 Project2 并添加新的迁移,我最终会在 Project1 和 Project2 中进行与核心项目相关的迁移.
我的问题是:有没有办法可以将 CoreContext 的迁移保留在 Core 项目中,并将 Project1Context 和 Project2Context 迁移到其相应的项目并自动执行与该项目相关的所有迁移,所以当我启动 Project1 时,它将运行它自己的迁移和 CoreContext 迁移?
澄清一下,我有 Project1 和 Project2 的单独数据库,最近将 EF 更新到版本 6。
【问题讨论】:
你想用这个实现什么?如果您有两个单独的数据库,则无论如何都需要在 Project1 和 Project2 的迁移中更改基本数据上下文。在我看来,与为这两个项目创建迁移相比,您正在尝试做的事情会引入更多的开销。即使您能做到,您仍然必须将基本更改应用到两个数据库。 【参考方案1】:你说的不可能.. 想象一下,如果您使用模型来创建基本的 CRUD 视图,然后更改模型。你的问题很相似..
【讨论】:
【参考方案2】:也许您可以编写自己的继承自MigrateDatabaseToLatestVersion
的子类?
【讨论】:
为了使其正常工作,它必须与不建议用于生产的自动迁移相结合。以上是关于具有代码优先迁移的实体框架多个项目的主要内容,如果未能解决你的问题,请参考以下文章
无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体