2012-04-23 34 views
2

我有两个类,客户端作者,这都是从成员派生。他们没有增加任何东西成员,但我更喜欢有单独的语义类和可能的后来扩展类。我区分基于角色,其中一个作者会员有一个AuthorRole会员和客户一个会员具有ClientRole成员。使用具有鉴别器列的普通香草TPH映射排除成员同时是客户端作者如何将两个类映射到同一个表,没有歧义列?

我可以看到解决的唯一方法,这是有一个ClientRepositoryAuthorRepository做映射,用一无所知任何继承我的分贝范围内,但在这里我采取的性能损失,因为如ClientRepository将不得不查询成员实例并将其映射到客户端实例。

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

回答

0

EF中的TPH映射表明,客户端是成员,作者是成员,但永远不会有成员是客户端和作者。甚至不可能有会员将角色从客户转移到作者,反之亦然。

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

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

+0

我说“阻止成员既是客户又是作者”,你说不,我错了,但是“从来不会有成员是客户和作者”。这正是我所说的,我怎么会错? 我已经与映射,因为你说EF无法处理这个,谢谢你确认该部分。 – ProfK 2012-04-23 21:45:16

+0

对不起,这是我的英语问题 - 我无法正确理解你的描述。我修改了答案。 – 2012-04-23 21:58:43

+0

没问题,谢谢。 – ProfK 2012-04-24 04:33:49

相关问题