【问题标题】:Aliases for Complex Type Property Names in the Entity Framework实体框架中复杂类型属性名称的别名
【发布时间】:2011-09-15 22:49:59
【问题描述】:

我的 DBA 称他的列名与我们的代码使用表数据的方式不同(例如描述与产品名称)。我想知道我在实体框架中是否有一个复杂的类型,是否可以给属性一个别名?

【问题讨论】:

  • 我会说@Ladislav Mrnka 有正确的答案

标签: c# asp.net visual-studio entity-framework


【解决方案1】:

在 Visual Studio 中有一个屏幕/面板调用映射详细信息。默认情况下,当您打开设计器屏幕“EF4”时,它通常在错误列表、输出等附近的底部选项卡中可见。在设计器视图中,当您单击表时,下面的面板将填充列(来自数据库表)和值/属性(来自您的类)。在值/属性中,您可以将名称和类型更改为您想要的类。当 DBA 开始创建垃圾列名或开始在某些地方使用前缀而不在其他地方使用前缀时,我会定期执行此操作。

希望这会有所帮助。

编辑:

如果真的需要,这里是如何更改复杂类型的示例,http://blogs.msdn.com/b/wriju/archive/2010/07/26/ef4-complex-type.aspx

【讨论】:

  • 我看到了“映射详细信息”面板,但它只显示实体的映射,而不显示复杂类型的映射。我正在使用的复杂类型显示在模型浏览器中。当我选择复杂类型或其属性时,映射详细信息面板会显示“在实体设计器或模型浏览器上选择一个实体或关联以编辑其映射”。
  • 如果只是想更改实体名称,属性比模型详细信息面板是地方。我不明白您为什么要创建不同于地址线的复杂类型 EF4。否则最好编写一个 sp 并使用新的实体类型 EF4 创建或重命名它。
【解决方案2】:

您是否使用 EntityFramework 代码优先?当您提到复杂类型时,这就是我的想法。如果是这样,如果您提供该信息,它将帮助您获得更好的答案...

如果是这样的话,这里是 ScottGu 在Custom Database Schema Mapping 上的一篇很棒的文章

代码如下所示:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<YourEntityName>().MapSingleType(t => new {
        columnId = t.Id,
        description = t.ProductName // If database column name is description and your entity property name is ProductName
        product_name = t.Description // If it's the other way around...
    }).ToTable("DatabaseTableName");
}

【讨论】:

  • 我没有使用代码优先。我会使用该选项从函数导入向导中自动生成复杂类型,但由于 proc 的性质,存储的 proc 不会产生任何列。因此,我手动创建了一个复杂类型并添加了与结果集中的列名称匹配的属性。我不喜欢结果集列名称,因为它们并不完全符合我们的业务逻辑,因此我想给它们取更接近业务名称的别名。
【解决方案3】:

您可以根据需要命名属性并将数据库字段映射到该属性。属性名称不依赖于相关数据库列的名称。

【讨论】:

  • 这是如何实现的?我在模型浏览器中看到的复杂类型属性的唯一字段是并发模式、默认值、文档、Getter、名称、Nullable、Setter、StoreGeneratedPattern 和类型。我假设 Name 需要映射到表中的列名。
  • Mrnka 是正确的。只需将名称更改为您想要的属性名称。它不必是列名。这是在映射中处理的......
猜你喜欢
  • 2013-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多