由于EF的这个小怪癖,我的处境令人沮丧。这是行为的简单演示。首先是数据库模式:

如您所见,RestrictedProduct是产品的一种特殊情况,我打算使用某些特殊代码来制作Product的子类。

现在,我导入到EF数据模型:

糟糕! EF看到RestrictedProduct只有两个字段,都是FK,因此将其映射为ProductRestriction之间的一对多关系。所以我回到数据库,并向Dummy添加一个RestrictedProduct字段,现在我的EF模型看起来好多了:

但是那个Dummy字段是愚蠢且毫无意义的。也许我可以删除它?我吹走了数据库表和实体模型中的字段,然后刷新了数据库中的模型...

不好了! Product-Restriction关联以新名称(RestrictedProduct1)回来了!另外,它不会编译:



除了将Dummy字段保留在RestrictedProduct表上之外,还有什么方法可以防止此行为?

最佳答案

我刚刚遇到了同样的问题,作为将虚拟字段放入RestrictedProduct表中以强制创建实体的替代方法,您还可以将RestrictedProduct.RestrictionId字段设置为可空,然后EF将为其生成一个实体。然后,您可以对其进行修改以使用继承,并且任何后续的“从数据库更新模型”都不会导致不良的nav属性。这不是一个很好的解决方案,但是可以解决。

10-07 21:42