首页 > 解决方案 > 在 tt 文件上“运行自定义工具”时自动生成自定义代码

问题描述

我在项目“DAL”中有这个 edmx,首先是数据库。
但是 edmx 的 tt 文件在另一个项目“DomainModel”中。
两个项目都在同一个解决方案中。

现在,每当我在数据库中创建新表,从数据库更新模型时,我必须手动重新插入IEntitypublic EntityState EntityState { get; set; }在 tt 文件上从“运行自定义工具”生成的每个表类中。

public partial class newTable : IEntity
{
    public EntityState EntityState { get; set; }
}

public partial class oldTable : IEntity
{
    public EntityState EntityState { get; set; }
}

我还必须手动重新插入Configuration.LazyLoadingEnabled = false;Configuration.ProxyCreationEnabled = false;在以下代码中

public partial class myEntities : DbContext
{
    public myEntities()
        : base("name=myEntities")
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }
}

无论如何我可以自动化这些吗?尤其是第一部分,有数百张桌子。

标签: c#asp.net-mvcentity-framework.net-4.5edmx

解决方案


您可以尝试调整tt,但我建议您使用部分功能,它是有目的的:)。将所有修改放在单独的文件中,该文件不会在每次模型更新时被替换。这仍然是手动或半手动工作,但您只需要这样做一次,然后您只需要为新表更新它。

// DbModelPatches.cs
public partial class newTable : IEntity
{
    public EntityState EntityState { get; set; }
}

public partial class oldTable : IEntity
{
    public EntityState EntityState { get; set; }
}

如果默认构造函数是由您生成的,tt您无法在部分文件中替换它,但您可以定义另一个,参数化,并将所有更改放在那里。

public partial class myEntities : DbContext
{
    public myEntities(string name)
        : base("name={name}")
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.ProxyCreationEnabled = false;
    }

   // or static factory method:
   public static myEntities CreateContext() 
   {
      var res = new myEntities();
      res.Configuration.LazyLoadingEnabled = false;
      res.Configuration.ProxyCreationEnabled = false;
      return res;
   }
}

推荐阅读