我有以下数据库模式:映射导航属性
我使用表每次Hiearchy(TPH)的继承。 “案例”表的“类型”字段确定案例是电子邮件案例还是叽叽喳喳案例。它们都是与Cases表的1:N关系。
我使用数据库先用EF办法,这就是我要使用的模型:
的问题是,我无法使用外键导航属性映射到子表, (Email.CaseId < - > Cases.Id和Tweets.CaseId < - > Cases.Id)。我想要实现的是EmailCase实体具有导航属性来发送电子邮件,而TwitterCase实体具有一个Tweets。
我可以使它工作,只有当我手动添加关联,然后导航,但当然这不会反映在数据库中。
我该如何解决这个问题?我应该使用Table-per-Type(TPT)而不是TPH吗?但在这种情况下,例如EmailCase只会包含一个ID到原来的情况,没有别的,这听起来很奇怪。 (这是如果我使用模型第一种方法会产生什么)。
或者我应该手动添加关联和导航属性?
感谢您的好回答。我有多种服务来收集各种来源的数据。所有这些服务和Web应用程序(ASP。NET MVC)使用EF与数据库进行交互。服务从源中获取数据后,将其插入到数据库中,并从中创建一个案例。基于你的回答,我想我会坚持TPH(这意味着据我所知手动添加关联和导航到继承的entites)。 – norbip
@norbip:是的,我认为,一旦涉及继承,您必须手动调整从数据库创建的模型。即使对于TPT:如果数据库中的EmailCases和TwitterCases表具有对'Cases'表的FK约束,DB-First可能会在它们之间创建三个具有导航属性的实体,而不是层次结构。数据库不理解继承是什么。 – Slauma