在Entity Framework 6中,我们可以通过运行
添加脚手架使用的T4模板Install-Package EntityFramework.CodeTemplates.CSharp
但是在Entity Framework Core中,脚手架系统似乎没有使用T4模板,看起来脚手架也不能定制。它似乎都在c#类中,例如。
有没有办法自定义脚手架的输出?
答案 0 :(得分:6)
有一个特殊的,尚未被记录的钩子来覆盖设计时服务:
class Startup
{
public static void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
}
然后实现自定义生成器。
class MyEntityTypeWriter : EntityTypeWriter
{
public EntityTypeWriter(CSharpUtilities cSharpUtilities)
: base(cSharpUtilities)
{
}
// TODO: Override with custom implementation
}
更新:有关在EF Core 1.0.2 +中执行此操作的其他方法,请参阅Yehuda Goldenberg的答案。
答案 1 :(得分:5)
在.Net Core 1.1中,覆盖设计时服务的方法是在启动程序集中实现IDesignTimeServices接口。例如:
public class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
serviceCollection.AddSingleton<DbContextWriter, MybContextWriter>();
}
}