继承上下文时,避免从基础EF Core 3.0模型重新建模对象

目标

我的目标是创建一个DbContext层次结构,每个层次结构都驻留在不同的程序集中。正确建立了所有需要的引用,以便C#代码成功编译。

场景

假设我创建了一个数据库上下文,例如DbChild,从一个基数继承而来,例如DbBase

基本上下文具有在OnmodelCreating()中定义的某些实体。这些实体的迁移已创建,并成功应用于数据库,因此db模式包含映射的DbBase模型。

不用说DbChild使用相同的连接字符串,因此使用相同的数据库(我尝试了多种方法来提供连接字符串,最后一种方法直接在optionsBuilder.UseSqlServer("<conection string>");中指定了它)。 / p>

实际结果

但是,为子上下文创建迁移时,会将基本模型作为子模型的一部分包含在内,这会导致DB中的SQL对象重复。

必需的结果

需要“ 干净”迁移,包括从子上下文中仅个SQL对象(EF实体)。

任何想法如何实现这一目标?

先谢谢了。

PS :在Ignore(...)中调用OnmodelCreating()可能是一种解决方法,但是它需要DbBase中引用的所有内容都在DbChild中引用,即不是一个选择。

PS2 :在创建子模型时也完全忽略了基础模型也不是一种选择-子模型使用基础中的实体作为关系。

编辑:快照<ContextName>Modelsnapshot.cs包含模型的“副本”,该副本随每次迁移而更新。这是每次迁移开始的地方。但是,在复杂的模型中,从现有数据库中以编程方式生成快照文件,而不是复制,更改名称空间,重命名以反映上下文名称,这将更加容易,并且更重要-安全。

因此,这些问题可能会转换为“ 在应用首次迁移时如何生成数据库快照?”。

欢迎提出任何想法。

whywjh 回答:继承上下文时,避免从基础EF Core 3.0模型重新建模对象

在创建新的派生上下文时,在设置数据库连接字符串之后但在向上下文添加任何派生类型之前,应创建一个迁移,以保存先前存在的基本上下文类型的快照。

在EF6中,这可以通过使用Add-Migration PreExisting –IgnoreChanges创建迁移来完成。这将产生一个迁移,其中内部模型包含更新的快照,但是UpDown的迁移方法为空。

关于EF Core当前是否支持-IgnoreChanges开关,我还不是最新的。根据{{​​3}},另一种方法是在创建迁移后手动清除Up / Down方法。

只有在创建了第一个快照迁移之后,才开始将其他实体添加到派生上下文中,并创建迁移以将它们添加到数据库中,等等。

本文链接:https://www.f2er.com/3038559.html

大家都在问