我正在使用EF工具包从现有数据库创建我的POCO类。随着项目的进行,我将不得不多次生成这些类。生成的类有一些问题我不想每次生成代码时都要纠正。
问题1:
当表有两个外键到同一个表时,它不会生成良好的属性名称。例如:
它生成:
public partial class Flow
{
public virtual Element Element { get; set; }
public virtual Element Element1 { get; set; }
}
我想要的时候:
public partial class Flow
{
public virtual Element FromElement { get; set; }
public virtual Element ToElement { get; set; }
}
我通过使用类似的部分类解决了这个问题:
public partial class Flow
{
public virtual Element FromElement
{
get {return Element;}
set { Element = value; }
}
public virtual Element ToElement
{
get {return Element1;}
set {Element1=value;}
}
}
这样我就不必编辑生成的类了。
第二个问题:
它无法识别数据库上的自动增量GUID属性。它会生成:
public partial class Process
{
public System.Guid ProcessId { get; set; }
}
什么时候应该生成:
public partial class Process
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public System.Guid ProcessId { get; set; }
}
问题是,如何告诉EF这些列是自动增量而无需插入 “[DatabaseGenerated(DatabaseGeneratedOption.Identity)]”在生成的类上的每个主键字段之前?
答案 0 :(得分:0)
实际上,我发现很容易为生成的代码核心T4模板。只需编辑Mapping.tt并在下面的代码中插入最后一行。:
// Primary Key
<#
if (efHost.EntityType.KeyMembers.Count() == 1)
{
#>
this.HasKey(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>)
.Property(t => t.<#= efHost.EntityType.KeyMembers.Single().Name #>).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);