具有代码优先迁移的实体框架多个项目

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 实体

在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移

无法使用实体框架代码优先创建具有凭据的数据库?

实体框架代码优先迁移忽略 [Key] 并强制复合键