仅使用Entity Framework 6忽略一种模式的迁移

时间:2018-11-14 11:04:21

标签: c# entity-framework entity-framework-6

我正在尝试使用EF做一些我认为应该很简单的事情,但我无法确切地知道如何做到这一点。

假设我们有一个核心ASP.NET Web应用程序,其数据位于数据库的dbo模式中。然后,我们要添加一个可选模块,其数据位于我们可以根据某些业务需求启用的opt模式中。

可选模块将需要来自主模式的数据-它是在那里找到的功能的扩展。为使此过程轻松自如,最好能使用LINQ进行无缝体验。

我目前拥有的工作原型是继承关系OptionalDataContext : CoreDataContext。 CoreDataContext用于访问和修改现有数据。

假设我现在只想将一个表添加到opt模式中:DbSet<OptionalClass> OptionalClasses。它被放在OptionalDataContext的属性上。可选类如下

[Table(Name="OptionalClasses", Schema="opt")]
OptionalClass {
public int Id {get; set;}
public string OptionalData {get; set;}
public virtual CoreAppClass CoreData {Get; set}
}

其中的虚拟属性指向表dbo.CoreAppClasses。

现在,经过艰难的启动之后,我们拥有的设置使我的一个上下文可以自由地在两个模式之间执行LINQ连接和查询。如果CoreAppClass又具有虚拟属性,则可以使用链接的Include语句访问这些​​属性。太好了。

我遇到的问题是,当我支撑可选应用程序的初始迁移时,它会尝试在dbo模式中创建每个现有表,但是这些表已经存在。

在注释掉可选上下文的一个DbSet之后,我可以使用-IgnoreChanges生成第一个迁移,然后添加我的可选DbSet并从那里进行,但这意味着每当有人更新核心应用程序的数据库架构时,我们都需要在可选应用程序中运行本质上的合并迁移。

是否有一个简单的解决方案,以便添加迁移基本上只对新OptionalDataContext的核心部分使用-IgnoreChanges命令?

为每个核心属性使用modelbuilder.Ignore()是不可行的-这只是更多的维护问题。我想进行一些配置,以使这些迁移将仅针对dbo表的任何更改更新EF模型快照,而对于所有opt更改进行脚手架迁移。

0 个答案:

没有答案