【问题标题】:EF6 - Code First - Are property mappings needed?EF6 - 代码优先 - 是否需要属性映射?
【发布时间】:2013-05-22 01:48:22
【问题描述】:

我一直在阅读使用实体框架的代码优先方法。不幸的是,我找不到与 EF4 相关的更多文档。但是我读过的文档(scott gu's blog on EF4)表明我不需要映射。

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

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

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

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

任何在 EF6 代码优先方法上有任何有用链接的人都将不胜感激,谷歌也失败了 :)

【问题讨论】:

    标签: entity-framework entity-framework-6


    【解决方案1】:

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

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

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

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

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

    如果这些都不适合你,那么是的,我认为没有它们你可能会很好。

    【讨论】:

    • 我最终自定义了转换过程以删除它们,但事情似乎还可以,但需要更多测试。
    【解决方案2】:

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

    Code first conventions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2015-04-27
      • 2015-12-04
      • 1970-01-01
      • 2011-08-06
      • 2012-01-09
      相关资源
      最近更新 更多