我正在尝试使用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更改进行脚手架迁移。