Entity framework EF6-代码优先-是否需要属性映射?

Entity framework EF6-代码优先-是否需要属性映射?,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我一直在阅读实体框架的代码优先方法。不幸的是,我找不到更多关于EF4的文档。但是我读过的文档(scott gu关于EF4的博客)表明我不需要映射 因此,我使用EF6 Power Tools从现有数据库生成了一个代码文件,这将生成我所有的模型类和一个mappings文件夹。我自动查看了其中使用Fluent API的映射文件(我认为这是正确的),并描述了有关表的详细信息 现在读这篇文章是有道理的,因为它可能不知道主键、必需的属性、关系,但是我没有从博客文章中得到属性到列的映射,这些都是不需要的,那么

我一直在阅读实体框架的代码优先方法。不幸的是,我找不到更多关于EF4的文档。但是我读过的文档(scott gu关于EF4的博客)表明我不需要映射

因此,我使用EF6 Power Tools从现有数据库生成了一个代码文件,这将生成我所有的模型类和一个mappings文件夹。我自动查看了其中使用Fluent API的映射文件(我认为这是正确的),并描述了有关表的详细信息

现在读这篇文章是有道理的,因为它可能不知道主键、必需的属性、关系,但是我没有从博客文章中得到属性到列的映射,这些都是不需要的,那么为什么我需要它们呢

如果列名不能在代码中表示,我可以理解需要它们,但我的命名约定不允许这样做

我问这个问题的主要原因是一个可维护性问题,我宁愿只在一个地方有一个特定属性的代码,这些行
this.property(t=>t.ID).HasColumnName(“ID”)对我来说似乎是多余的


任何一个有关于EF6代码优先方法的有用链接的人都会很感激,因为谷歌正在失败:)

EF使用约定做很多事情。一旦您了解并熟悉了约定,您就可以声明类和内容了


如果您对默认列名等感到满意,那么当然不需要属性映射。您可能需要它们来设置复合主键中的列顺序,或指定属性包含数据库生成的值(如标识/自动增量列),但即使如此,您也可以不使用列名,而使用默认值

列映射确实有一些用途,但我不确定它们是否与您的情况相关:

  • 您可以将实体映射到现有数据库,而不必模仿列名,因为列名可能不符合标准的.NET命名约定

  • 同样,您可以在代码和数据库中遵循不同的命名约定。例如,在我工作的地方,数据库列通常应该是camelCase,而不是PascalCase

  • 它们允许您在以后更改属性的名称,而无需重新创建/迁移数据库


如果这些都不适用于您,那么是的,我想您没有它们也可以。

我最终定制了转换过程以删除它们,但似乎还需要更多测试。