当我们离开Linq2Sql时,我们正在学习Entity Framework 6.1(来自NuGet)。我们有一些表关联两个独立的表,如下所示。
EF6数据库第一代
DB Diagram:
架构概述:
当在Visual studio,空白类库中,执行Database First EF6 EDMX文件时,该图只生成TableA和TableC - TableB不会生成。
Visual Studios查看:
您可以看到只创建了TableA和TableC。从技术上讲,应该已经创建了TableB,因为您希望能够管理这些引用。
图中所示的A和C之间的关联:
我觉得我错过了一个选项,或者误解了实体框架的一个关键概念。知道如何用T4生成缺少的TableB吗? EDMX文件确实显示了它,但由于某种原因,它不会生成到.CS文件中,其中两个属性指示关系。
我们需要这个的主要原因是,我们扩展了EF6 T4模板以添加一些工厂模式以匹配我们现有的模型。因为它不会为TableB生成一个类,所以我们不会得到我们正在寻找的自动生成的代码。
思考/建议?感谢。
答案 0 :(得分:7)
EF不会生成弱实体或连接表,您需要通过流畅的API或使用数据注释手动配置关系
正如微软网站上所述:在关系会议下:
注意:如果相同类型之间有多个关系(for 例如,假设您定义了
Person
和Book
类,其中Person
类包含ReviewedBooks
和AuthoredBooks
导航 属性和Book
类包含Author
和Reviewer
导航属性)您需要手动配置 通过使用数据注释或流畅的API来建立关系。更多 信息,请参阅数据注释 - 关系和Fluent API - 关系。
有关详细信息,请参阅此link
<强>已更新强>
对于EDMX(但需要维护费用),解决方法可以如下工作:
只要您不再次从数据库更新模型,此解决方法就会起作用。
推荐的解决方案,保留EDMX生成的所有内容,并使用以下报告的链接了解有关如何使用crud操作的更多信息&#34; help&#34;由用户&#39; @ TravisWhidden&#39;
答案 1 :(得分:2)
如@Hadi Hassan所述,EF不会“公开”或识别仅由其他实体组成的关系表。
解决方法:
如果您只需要“阅读”数据
view
。TableB
Model (.EDMX)
更新(选择更新视图)TableB
数据。 如果您需要修改TableB
相应地在您的架构中创建存储过程。
将您的Procs作为函数导入EF模型
现在,您可以从模型上下文中调用这些函数以用于其余的CRUD操作。
答案 2 :(得分:0)
我发现的最简单的方法是向表中添加一个自动递增字段,并将唯一字段作为主键。然后添加由两个外键组成的唯一约束。您可能需要删除表并重新创建表才能进行设置,因为数据库不喜欢删除现有的PK关系。
然后在Entity模型中删除表,以及Entity可能已创建的与该表中的关系相关的任何导航属性。保存模型,重建,然后在图中从数据库更新。您的表现在应该在Entity中显示为常规表。