Entity framework 如果没有鉴别器列,如何将两个类映射到同一个表?

Entity framework 如果没有鉴别器列,如何将两个类映射到同一个表?,entity-framework,ef-code-first,Entity Framework,Ef Code First,我有两个类,Client和Author,它们都是从Member派生的。它们不向成员添加任何内容,但我更喜欢为语义和以后可能的扩展使用单独的类。我根据角色进行区分,其中作者是具有AuthorRole成员身份的成员,客户端是具有ClientRole成员身份的成员。使用带有鉴别器列的普通TPH映射可以排除成员既是客户机又是作者 解决这个问题的唯一方法是让ClientRepository和AuthorRepository进行映射,而我的db上下文完全不知道任何继承,但在这里我遇到了性能问题,因为例如Cl

我有两个类,Client和Author,它们都是从Member派生的。它们不向成员添加任何内容,但我更喜欢为语义和以后可能的扩展使用单独的类。我根据角色进行区分,其中作者是具有AuthorRole成员身份的成员,客户端是具有ClientRole成员身份的成员。使用带有鉴别器列的普通TPH映射可以排除成员既是客户机又是作者

解决这个问题的唯一方法是让ClientRepository和AuthorRepository进行映射,而我的db上下文完全不知道任何继承,但在这里我遇到了性能问题,因为例如ClientRepository必须查询成员实例并将其映射到客户端实例


有其他方法可以做到这一点吗?

EF中的TPH映射表示客户是成员,而作者是成员,但决不能有一个成员是客户和作者。甚至不能有成员将角色从客户端更改为作者,反之亦然

如果要在同一个表中存储两个派生类,则必须使用TPH和鉴别器。EF将确保上述规则得到保证。如果这些规则中的任何一条在您的场景中无效,那么继承对您来说都是一个糟糕的设计,因为即使是.NET也不允许您将实例的类型从客户端更改为成员


如果您想保持当前的设计,您必须使用客户机存储库和到自定义类的额外级别的映射,因为EF无法通过关系驱动TPH继承。在EF中,这意味着这种继承不能存在,因为您可以更改关系,但不能更改已创建实例的类型

EF中的TPH映射表示客户是成员,而作者是成员,但决不能有一个成员是客户和作者。甚至不能有成员将角色从客户端更改为作者,反之亦然

如果要在同一个表中存储两个派生类,则必须使用TPH和鉴别器。EF将确保上述规则得到保证。如果这些规则中的任何一条在您的场景中无效,那么继承对您来说都是一个糟糕的设计,因为即使是.NET也不允许您将实例的类型从客户端更改为成员


如果您想保持当前的设计,您必须使用客户机存储库和到自定义类的额外级别的映射,因为EF无法通过关系驱动TPH继承。在EF中,这意味着这种继承不能存在,因为您可以更改关系,但不能更改已创建实例的类型

我说“排除会员既是客户又是作者”而你说不,我错了,但“不可能有会员既是客户又是作者”。那正是我说的,我怎么会错呢?我已经使用了映射,正如您所说,EF无法处理此问题,感谢您确认该部分。对不起,这是我的英语有问题-我没有正确理解您的描述。我修改了答案,我说“不允许会员既是客户又是作者”,你说不,我错了,但“不可能有会员既是客户又是作者”。那正是我说的,我怎么会错呢?我已经使用了映射,正如您所说,EF无法处理此问题,感谢您确认该部分。对不起,这是我的英语有问题-我没有正确理解您的描述。我修改了答案。