【发布时间】:2015-08-09 05:45:14
【问题描述】:
由于 EF 的这个小怪癖,我遇到了令人沮丧的情况。这是该行为的简单演示。首先是数据库架构:
如您所见,RestrictedProduct 是产品的一个特例,我打算用一些特殊代码创建Product 的子类。
现在我导入到 EF 数据模型:
哎呀! EF 发现 RestrictedProduct 只有 2 个字段,都是 FK,因此它将其映射为 Product 和 Restriction 之间的一对多关系。于是我回到数据库,给RestrictedProduct添加了一个Dummy字段,现在我的EF模型看起来好多了:
但是 Dummy 字段既愚蠢又毫无意义。也许我可以删除它?我从数据库表和实体模型中吹掉字段,然后从数据库中刷新模型...
哦,不! Product-Restriction 协会以新名称 (RestrictedProduct1) 又回来了!另外,它不会编译:
错误 3034:从行 (x, y) 开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行。确保这两个映射片段将 AssociationSet 的两端映射到相应的列。
除了将Dummy 字段保留在RestrictedProduct 表上之外,有什么方法可以防止这种行为?
【问题讨论】:
-
尝试另一种方式,创建类模型并查看 EF Code First 在数据库中创建的表
-
@Wim - 好主意!我这样做了,生成的数据库模型与我开始使用的基本相同。但是从数据库中刷新并不会弄乱 EF 模型!看不到 EDMX 文件的底层 XML 之间有任何明显的区别,但那里有很多技术问题,我敢肯定其中一定有一些秘密开关。知道它可能是什么吗?
-
没有,我帮不了你。如果您确实发现了什么,请告诉我们。
-
@Shaul 听起来你在这里有一个领域驱动的设计。您确定 DB first 是适合您的方法吗?我不认为 edmx 生成器可自定义以允许您关闭对某些关联的识别。
-
@bmewsing 我的印象是 DB-first 和 code-first 几乎可以互换,因为您应该从任何一种方法中获得几乎相同的结果。我弄错了吗?
标签: c# entity-framework entity-framework-5 database-first