在使用Entity Framework Code First 6时,我尝试复制以下模型:
A类是一个抽象类,由A1和A2实现。此外,A类将导航属性navigationPropertyB暴露给B类,B类是由B1和B2实现的抽象类。
A类对象可以有一个B类对象,B可以在A类实例中多次参与。
目前我正在使用Table per Hierarchy和B Table per Concrete Type。
正确映射了A类层次结构,并使用了以下映射:
modelBuilder.Entity<A>()
.Map<A1>(m => m.Requires("AType").HasValue((int)AType.A1))
.Map<A2>(m => m.Requires("AType").HasValue((int)AType.A2))
我理解它是一个类似的概念,但我正在努力将工作映射到A&#39的navigationPropertyB模型。
有人可以帮忙吗?
谢谢!
答案 0 :(得分:0)
您尝试在A
和B
之间创建一对多关系,因为每个B
都可能与多个A
建立关系。这里的一个问题是,由于您使用的是B
层次结构的每个具体类型(TPC)继承,因此您将无法在A
和层次结构中的类之间创建单个关联B
。以下是您linked article on TPC:
... SQL模式不知道继承;实际上,我们已经将两个不相关的表映射到一个更具表现力的类结构....我必须强调数据库表之间没有关系,除了它们共享一些类似的列。
换句话说,使用TPC,由于类型不共享表,因此可以在B
的层次结构中的实体之间具有重复的键值!
因此,如果您想在A
和B
之间建立关联,则需要
B
的层次结构