当我们离开
Linq2sql时,我们正在学习Entity Framework 6.1(从NuGet).我们有一小撮桌子,可以连接两个独立的桌子,如下所示.
@H_301_2@EF6数据库第一代
@H_301_2@DB图:
@H_301_2@模式概述:
@H_301_2@当在Visual工作室,空白类库中,做一个@L_502_1@ First EF6 EDMX文件时,该图只生成TableA和TableC – 不会生成TableB.
@H_301_2@视觉工作室视图:
@H_301_2@您可以看到仅创建了TableA和TableC.技术上应该已经创建了TableB,因为您希望能够管理这些引用.
@H_301_2@A和C之间的关联如图所示:
@H_301_2@我觉得我错过了一个选择,或者误解了实体框架的一个关键概念.任何想法如何使用T4生成的缺少的TableB? EDMX文件显示它,但由于某些原因,它不会生成到.CS文件中,其中两个属性指示关系.
@H_301_2@我们需要的主要原因是扩展了EF6 T4模板,以添加一些工厂模式来匹配我们现有的模型.因为它没有为TableB生成一个类,所以我们不会得到我们正在寻找的自动生成代码.
@H_301_2@想法/建议?谢谢.
解决方法
EF不会生成弱实体或连接表,您需要通过流畅的api手动配置关系或使用数据注释
@H_301_2@如微软网站所述:“关系公约”:
>从数据库更新EDMX
>在连接表中重新创建外键 @H_301_2@只要您不再从数据库更新您的模型,此解决方法将会起作用. @H_301_2@推荐的解决方案,保留EDMX生成的所有内容,并使用用户“@TravisWhidden”报告“有帮助”的以下链接,详细了解如何使用crud操作 @H_301_2@> stackoverflow.com/questions/425316
> https://www.youtube.com/watch?v=uMQwORSTGX4(视频)
@H_301_2@Note:If you have multiple relationships between the same types (for@H_301_2@有关更多信息,请参阅此link @H_301_2@更新 @H_301_2@如果EDMX(但是维护成本),解决方法将适用于以下情况: @H_301_2@>从数据库中的连接表中删除外键
example,suppose you define thePerson
andBook
classes,where the
Person
class contains theReviewedBooks
andAuthoredBooks
navigation
properties and theBook
class contains theAuthor
andReviewer
navigation properties) you need to manually configure the
relationships by using Data Annotations or the fluent API. For more
information,see Data Annotations – Relationships and Fluent API –
Relationships.
>从数据库更新EDMX
>在连接表中重新创建外键 @H_301_2@只要您不再从数据库更新您的模型,此解决方法将会起作用. @H_301_2@推荐的解决方案,保留EDMX生成的所有内容,并使用用户“@TravisWhidden”报告“有帮助”的以下链接,详细了解如何使用crud操作 @H_301_2@> stackoverflow.com/questions/425316
> https://www.youtube.com/watch?v=uMQwORSTGX4(视频)