我有一个继承了另一个类与之关系的基类的类 .
例:
-
基类:动物
-
子类1:狗
-
子类2:猫
-
相关的一对多表:接种疫苗
-
一只狗可以多次接种疫苗 . 这是作为List <Vaccination>实现的 .
-
一只猫可以多次接种疫苗 .
-
疫苗接种记录只能有一只与之相关的动物 .
-
疫苗接种与狗或猫无关 . (狗和猫使用非碰撞的GUID . )
没有动物桌;动物是一个抽象类 . 但疫苗接种只知道动物,而不是狗 . (EF,但是,两者都知道 . )我将我的类库分开,使得Animal和Vaccination在核心库中,Dog在另一个引用核心库的库中 .
当使用Entity Framework Code First时,Vaccinations表正在获取额外的列:Dog_ID,因为Dog类的List <Vaccination>显式声明正在创建推理 . 因此,该栏将疫苗接种记录映射到狗 . 这样就可以了,除了我希望在多种类型的Animal之间共享这个额外的列 . 所以例如,而不是拥有Dog_ID和Cat_ID我想拥有一个可以加入Dog或Cat的Animal_ID .
由于Animal是抽象的并且没有DB表,我可以使用流畅的语句和/或属性/属性声明来实现这一点吗?
3 回答
因此,当我实现当前标记为答案的内容时(我最终需要继续创建Animal表)我遇到了问题,因为正如我在我的问题中所解释的那样,我有一个孤立的项目,声明"Dog",为此以及我指示的相关问题here,here和here .
除非您创建
Animal
表并与该表 Build 关系,否则您的Vaccination
表将始终为每个接种疫苗类型的动物提供额外的FK列 . EF无法映射和关系的高级抽象 - 关系必须遵循相同的规则,就像在数据库中直接创建它们一样 .如果只有一些动物可以接种疫苗,您可以将另一个表添加到层次结构并与该新表 Build 关系(EF不能与接口一起使用) . 您将需要Table per Type映射,它将使您的查询性能在当前的EF版本中更糟糕 .
假设你的所有动物都接种了疫苗
然后,您可以继承
Cat
和Dog
并使用Table per Type
映射 .