我在项目“ DAL”中拥有这个edmx,首先是数据库。但是edmx的tt文件在另一个项目“ DomainModel”中。两个项目都在同一个解决方案中。
[现在,每当我在数据库中创建新表,从数据库更新模型时,我都必须在从tt文件的“运行自定义工具”生成的每个表类中手动重新插入IEntity
和public 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;
}
}
反正我有自动化这些吗?特别是第一部分,有几百张桌子。
您可以尝试调整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;
}
}