实体框架中复杂类型属性名称的别名

问题描述:

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

+0

什么是正确的答案? – Halcyon 2011-06-16 21:12:46

+1

我会说@Ladislav Mrnka有正确的答案 – bytebender 2011-06-17 21:38:12

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

+4

这是如何完成的?我在复杂类型属性的模型浏览器中看到的唯一字段是并发模式,默认值,文档,Getter,Name,Nullable,Setter,StoreGeneratedPattern和Type。我假设名称需要映射到表中的列名。 – Halcyon 2011-06-15 22:50:00

+1

Mrnka是正确的。只需将名称更改为您想要的属性名称即可。它不一定是列名。这是在映射处理... – bytebender 2011-06-15 23:07:24

您是否使用EntityFramework Code-First?当你提到我认为的复杂类型时。如果是这样,这将有助于你得到一个更好的答案,如果你提供的信息......

如果是这里的情况是Custom Database Schema Mapping

一个伟大的文章ScottGu的代码看起来是这样的:

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"); 
} 
+1

我没有使用代码优先。我将使用该选项从函数导入向导中自动生成复杂类型,但由于proc的特性,存储的proc不会生成任何列。因此,我手动创建一个复杂类型并添加与结果集中的列名相匹配的属性。我不是结果集列名的粉丝,因为他们并不完全遵循我们的业务逻辑,所以我想给他们别名,更接近业务所称的他们。 – Halcyon 2011-06-15 23:03:00

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

希望这会有所帮助。

编辑:

这里例如如何改变一个复杂的类型,如果确实需要,http://blogs.msdn.com/b/wriju/archive/2010/07/26/ef4-complex-type.aspx

+1

我看到“映射详细信息”面板,但它仅显示实体的映射,而不显示复杂类型的映射。我正在使用的复杂类型显示在模型浏览器中。当我选择复杂类型或其属性时,映射详细信息面板将显示“在实体设计器或模型浏览器上选择实体或关联以编辑其映射”。 – Halcyon 2011-06-16 14:33:22

+2

如果只是想更改实体名称,那么比模型细节面板的属性就是地方。我不明白你为什么要创建地址线以外的复杂类型EF4。否则,最好写一个sp并使用新的实体类型EF4创建或重命名它。 – Nickz 2011-06-21 03:21:46