在EF Core的 TPH继承层次结构中,如何共享外键?
我有一个 Events 基类,它包含一个抽象的子类,而这个子类本身又有两个(现在)子类:
public class Event {
}
public abstract class FooEvent : Event {
public Foo? Foo { get; set; }
}
public class BarEvent : FooEvent { }
public class BazEvent : FooEvent { }
(除了 FooEvent 之外的所有类都具有其他属性,且都按预期/需要的方式工作。)
EF正在生成三列外键:FooEventId、BarEvent_FooEventId 和 BazEvent_FooEventId。我非常希望所有的 FooEvent 实体都共享同一个 FooEventId 列,用于指向 Foo 表的外键,最好在 FooEvent 类中使用一个特性,这样其他子类就能自动处理。
理想情况下,EF会生成类似于
CREATE TABLE Entity
(
EntityId INT,
FooId INT
)
的内容,而不是它当前所做的:
CREATE TABLE Entity
(
EntityId INT,
FooId INT,
BarEvent_FooId INT,
BazEvent_FooId INT
)
理想的解决方案是让我能够添加一个新的(实际上是空的!)类 public class BuxEvent : FooEvent {},完全不需要迁移(当然,如果 BuxEvent 有其他属性,就需要迁移;这是可以理解的)。
这个问题该如何实现?
解决方案
原来我忘记在EF中注册 FooEvent。进行此注册后问题得到解决:它只创建了一个 FooId 列,正如所期望的那样。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。