具有非标准命名约定的数据库的POCO别名

本文关键字:数据库 别名 POCO 命名约定 非标准 | 更新日期: 2023-09-27 18:28:14

我有一个正在使用的数据库,每个列都命名为"product_id"、"event_tracking_detail_type"等。

它不使用标题大小写,而是全部使用小写,名称之间有_。我已经关闭了代码生成并使用了POCO生成器,但我希望将POCO命名为ProductId、ManufacturerImage(而不是manufacturer_image)。

有没有办法让POCO的名称与数据库中的实际名称不同,比如别名或其他什么?

我的理由是让代码与正确的名称交互,然后再更改数据库的列名。

具有非标准命名约定的数据库的POCO别名

查看MSDN关于数据注释的文档。可以使用TableColumn属性。

[Column(Name="product_id")]
Int32 ProductId;

或者,您可以使用流利的API(这里是示例)

modelBuilder.Entity<ENTITYNAME>() 
.Property(entity=>entity.ProductId) 
.HasColumnName("product_id")

如果使用T4模板,则可以修改一个函数WriteProprety,该函数将写出属性。你可以修改它,比如:

void WriteProperty(string accessibility, string type, string name, string getterAccessibility,  string setterAccessibility)
{
  //Start New Stuff
  string[] names = name.Split('_');
  names = names.ToList().Select(x => char.ToUpper(x[0]) + x.Substring(1)).ToArray();
  string fixedName = string.Join("", names);
 //End New Stuff
#>
  [Column(Name="<#=name>")]
  <#=accessibility#> <#=type#> <#=fixedName#> { <#=getterAccessibility#>get; <#=setterAccessibility#>set; }
<#+
}