[tt文件上的“运行自定义工具”时自动生成自定义代码

问题描述 投票:0回答:1

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

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

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-mvc entity-framework .net-4.5 edmx
1个回答
0
投票

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

// 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;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.