问题标签 [ef-model-builder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
40 浏览

c# - 如何从实体框架中的另一个项目将外键添加到现有表(实体)

我正在开发一个需要实体可扩展性而无需更改基本实体的项目。我有一个包含基本模型的 DLL 和一个包含模型扩展的 DLL(包括对基本模型项目的引用)。基本模型包含在具有相应 DbContextMain 的项目中。扩展包含在另一个项目中,带有它们的 DBContextExtensions。

这是基本模型,在基本模型 DLL 中:

, 在哪里:

,并且在我的扩展 DLL 中:

现在,我为基本模型创建了一个带有 DbContext 的项目 MainModels:

,如果我添加迁移,它会按预期创建迁移:

如果我只为扩展实体创建带有 DbContext 的 ExtensionModels 项目:

,然后我添加迁移,它将添加 Persons 表和 PersonExtensions 表:

如何防止迁移构建器Persons在扩展项目的迁移中添加表,但仍将外键添加到与另一个项目一起创建的已经存在的表中?我希望能够从 fluent api 执行此操作,而无需手动修改生成的迁移,因为这容易出错。请注意,该项目有数百个实体,并且无法手动修改生成的迁移。

我一直在尝试但不起作用:

我在 OnModelCreating 中添加了外键,如下所示:

如果我只这样做,它会添加“Persons”表和来自基本模型 DLL 的所有链接实体(为简单起见,此处未显示)。

我使用modelBuilder.Ignore()删除了基本 DLL 中定义的所有实体,但现在它添加了"Persons"表,但没有基本模型中的其余嵌套实体(仅存在原始字段)。

我再次明确添加modelBuilder.Model.RemoveEntityType("Person");modelBuilder.Ignore("Person");它仍然创建Persons表,我猜是因为它看到添加了外键......

任何帮助将不胜感激。谢谢!

0 投票
2 回答
29 浏览

c# - 如果我在 2 个不同的列中搜索 id,是否需要在 EF Core 中为 id 编制索引?

如果我执行如下查询,我将在两个不同的列上搜索相同的 ID。我应该有这样的索引吗?或者我应该创建 2 个单独的索引,每列一个?

询问:

如果我有一个像下面这样的查询,我是否需要所有 4 列上的多列索引?