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

时间:2012-03-19 20:21:54

标签: c# entity-framework entity-framework-4.1 poco

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

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

有没有办法让POCO拥有与数据库中实际存在的名称不同的名称,如别名或其他内容?

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

2 个答案:

答案 0 :(得分:1)

看看the MSDN documentation on data annotations。您可以使用TableColumn属性。

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

或者,您可以使用fluent APIhere are samples

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

答案 1 :(得分:0)

如果您使用的是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; }
<#+
}