由于EF的这个小怪癖,我的处境令人沮丧。这是行为的简单演示。首先是数据库模式:
如您所见,RestrictedProduct
是产品的一种特殊情况,我打算使用某些特殊代码来制作Product
的子类。
现在,我导入到EF数据模型:
糟糕! EF看到RestrictedProduct
只有两个字段,都是FK,因此将其映射为Product
和Restriction
之间的一对多关系。所以我回到数据库,并向Dummy
添加一个RestrictedProduct
字段,现在我的EF模型看起来好多了:
但是那个Dummy
字段是愚蠢且毫无意义的。也许我可以删除它?我吹走了数据库表和实体模型中的字段,然后刷新了数据库中的模型...
不好了! Product-Restriction
关联以新名称(RestrictedProduct1
)回来了!另外,它不会编译:
除了将Dummy
字段保留在RestrictedProduct
表上之外,还有什么方法可以防止此行为?
最佳答案
我刚刚遇到了同样的问题,作为将虚拟字段放入RestrictedProduct
表中以强制创建实体的替代方法,您还可以将RestrictedProduct.RestrictionId
字段设置为可空,然后EF将为其生成一个实体。然后,您可以对其进行修改以使用继承,并且任何后续的“从数据库更新模型”都不会导致不良的nav属性。这不是一个很好的解决方案,但是可以解决。