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

C# 实体框架中复杂类型属性名称的别名,c#,asp.net,visual-studio,entity-framework,C#,Asp.net,Visual Studio,Entity Framework,我的DBA对他的列名的调用与我们的代码使用表数据的方式不同(例如,description vs product name)。我想知道实体框架中是否有复杂类型,是否可以为属性指定别名?您可以根据需要命名属性,并将数据库字段映射到该属性。属性的名称不依赖于相关数据库列的名称。是否先使用EntityFramework代码?当你提到复杂类型时,我就是这么想的。如果是这样的话,如果你提供了这些信息,它将帮助你得到一个更好的答案 如果是这样的话,下面是ScottGu关于 代码如下所示: protected

我的DBA对他的列名的调用与我们的代码使用表数据的方式不同(例如,description vs product name)。我想知道实体框架中是否有复杂类型,是否可以为属性指定别名?

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

是否先使用EntityFramework代码?当你提到复杂类型时,我就是这么想的。如果是这样的话,如果你提供了这些信息,它将帮助你得到一个更好的答案

如果是这样的话,下面是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");
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().MapSingleType(t=>new{
columnId=t.Id,
description=t.ProductName//如果数据库列名为description,实体属性名为ProductName
product_name=t.Description//如果是另一种情况。。。
}).ToTable(“数据库表名”);
}

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

希望这有帮助

编辑:


这里的示例是,如果确实需要,如何更改复杂类型,

这是如何实现的?我在模型浏览器中看到的复杂类型属性的唯一字段是并发模式、默认值、文档、Getter、Name、Nullable、Setter、StoreGeneratedPattern和Type。我假设名称需要映射到表中的列名。Mrnka是正确的。只需将名称更改为所需的属性名称。它不必是列名。这是在映射中处理的…我不首先使用代码。我将使用该选项从函数导入向导自动生成复杂类型,但由于过程的性质,存储的过程不会生成任何列。因此,我手动创建一个复杂类型,并添加与结果集中列的名称匹配的属性。我不喜欢结果集列名,因为它们不完全符合我们的业务逻辑,所以我想给它们更接近业务调用的别名。我看到了Mapping Details面板,但它只显示实体的映射,而不显示复杂类型的映射。我正在使用的复杂类型显示在模型浏览器中。当我选择复杂类型或其属性时,“映射详细信息”面板会显示“在实体设计器或模型浏览器上选择一个实体或关联以编辑其映射”。如果只想更改实体名称,则“属性而非模型详细信息”面板就是位置。我不明白你为什么要创建一个比addressline更复杂的EF4类型。否则最好编写一个sp并使用新的实体类型EF4创建或重命名它