使用实体框架的导航属性的有意义的名称

Posted

技术标签:

【中文标题】使用实体框架的导航属性的有意义的名称【英文标题】:Meaningful Names for Navigation Properties using Entity Framework 【发布时间】:2011-09-06 00:56:48 【问题描述】:

我正在使用 ADO .NET Entity Framework 从数据库中导入我的模型。我的数据库中的一个表有一堆外键,都带有抽象名称,例如FKDevice132610.

当我将表导入到我的模型中时,它会为每个外键引入导航属性,但是它们是使用基于它们链接到的表名称的名称导入的。如果某个表有多个外键,则在末尾附加一个数字。

在这种情况下,Devices1 是 ParentDevices,Devices2 是 ChildDevices。有没有办法可以将此信息输入到我的外键中(比如使用描述或名称),以便实体框架为我的导航属性导入有意义的名称?

【问题讨论】:

【参考方案1】:

据我所知,目前没有办法做到这一点。这就是当前设计师的工作方式。更糟糕的是,当您将这些属性重命名为正确的名称时,从数据库更新模型有时会覆盖您的更改。

此工作项跟踪导航属性命名的改进 - http://entityframework.codeplex.com/workitem/125

【讨论】:

在这种情况下,它不是 EF 故障。这是设计器的失败 - 您可以通过使用代码优先方法或者如果您想通过手动编写 XML 映射从 EF 中获得最佳效果,则可以在没有设计器的情况下使用 EF。【参考方案2】:

想知道搜索“modelBuilder.Conventions.Remove”是否会引导您找到解决方案。 我希望我能提供更多帮助,但我才刚刚开始探索 EF。当我有多个字段引用同一个 ID 时遇到了类似的情况......我不记得解决了什么问题。

【讨论】:

模型建造者和设计师没有共同点。这两个是在完全不同的场景中使用的功能。【参考方案3】:

四年后... 在 EF 团队解决 this issue 之前,一种可能的解决方法是使用外部工具解析 .edmx 文件并替换所有以 <NavigationProperty Name= 通过更有意义的导航名称。 作为 XML,解析和查找多重性、FK 名称等属性非常容易。

【讨论】:

以上是关于使用实体框架的导航属性的有意义的名称的主要内容,如果未能解决你的问题,请参考以下文章

在导航属性实体框架上正确使用接口

实体框架对导航属性的约束

如何在实体框架模型中使用通用导航属性?

如何首先使用实体​​框架 5 代码删除具有导航属性的对象?

使用实体框架中的导航属性填充多对多关系表

无法获取要更新实体框架中导航属性的关系