【问题标题】:Fixing EF code generated from database修复从数据库生成的 EF 代码
【发布时间】:2014-06-18 13:00:53
【问题描述】:

我正在使用 EF 工具包从现有数据库创建我的 POCO 类。随着项目的进行,我将不得不多次生成此类。生成的类有一些问题,我不想每次生成代码时都必须纠正。

问题一:

当一个表有两个外键指向同一个表时,它不会生成好的属性名称。示例:

它生成:

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)]”在生成的类的每个主键字段之前?

【问题讨论】:

    标签: c# entity-framework code-generation t4


    【解决方案1】:

    实际上,我发现为生成的代码修改 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);
    

    【讨论】:

      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多