当一个实体从另一个实体继承时,我无法配置实体关系。我是ADO实体框架的新手 - 也许更有经验的人有一些关于如何做到最好的提示。我正在使用.net 4。
包含字段的数据库表:
产品和食品以及食品和香精之间存在限制。
使用设计器我从数据库中创建一个模型。设计师似乎做对了,Product和FoodProduct实体之间有1:0..1关联,Flavor和FoodProduct之间有1:*关联。我保存或构建时没有错误。
接下来,我将FoodProduct实体设置为从Product实体继承。然后我得到关于Product和FoodProduct之间关系的错误。好的,从新鲜开始,我首先在设置继承之前删除Product和FoodProduct之间的关系。但现在我对FoodProduct和Flavor之间的关系有误。所以我删除然后重新创建该关系,将Flavor.ID连接到FoodProduct.ProductID。现在我得到了其他错误。
我的问题是这个:我应该在Flavor.FoodProductID和 Product.ID 之间创建关系吗?如果是这样,我假设我可以(或应该)删除FoodProduct.ProductID属性。由于我的数据库将具有许多这些类型的关系,我最好首先创建实体模型并将表导出到SQL,还是导入数据库模式然后进行许多调整?
我的意图是会有几种类型的产品,其中一些需要许多额外的字段,其中一些不需要。因此,每个产品记录可能有零个或一个FoodProducts记录。至少根据我的想法,每个子类型(FoodProducts)的表应该能够“借用”产品中的主键(作为FK)来唯一地标识其每个记录。
你可以在这里找到一个屏幕截图:http://img218.imageshack.us/img218/9720/entityframework.jpg(我已经嵌入了img但尚未获得必要的代表!)
好吧,我删除了FoodProduct.ProductID字段,因为它总是应该返回与Product.ID相同的值。然后,正如您所暗示的那样,我必须手动将Products.ID字段映射到FoodProducts.ProductID字段。错误已解决。我会写一些代码来测试功能。感谢“观察”!
答案 0 :(得分:0)
观察结果:
FoodProducts 需要主键(例如,身份 - FoodProductID)。你确定它应该是食品和食品之间的1:0..1吗?我本以为它应该是1:0 .. *。要使这个基数工作,您需要在此表上使用独特的PK。
为实体设置继承时,将继承父实体的属性。因此 FoodProducts 将从产品表继承 ID 。
但是,在物理模型(数据库)上,此字段仍需要映射到 FoodProducts 表中的列 - 这就是您需要标识字段的原因。
设置继承后,仍需要映射派生表上的所有列。我的钱还没有把你在FoodProducts上的“ID”映射到任何一列。
如果您对模型进行屏幕显示并显示您所获得的错误,则可以更轻松地诊断问题。