Entity Framework 核心 - 自定义脚手架
Entity Framework Core - Customise Scaffolding
在 Entity Framework 6 中,我们可以添加脚手架使用的 T4 模板 运行
Install-Package EntityFramework.CodeTemplates.CSharp
但是在Entity Framework Core 中,脚手架系统似乎没有使用T4 模板,脚手架似乎也不能自定义。它似乎全部在 c# 类 中,例如。
有什么方法可以自定义脚手架的输出吗?
有一个特殊的、尚未记录的挂钩来覆盖设计时服务:
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
}
更新: 请参阅 Yehuda Goldenberg 的回答以了解在 EF Core 1.0.2+ 中执行此操作的另一种方法。
在.Net Core 1.1中,覆盖设计时服务的方法是在启动程序集中实现IDesignTimeServices接口。例如:
public class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
serviceCollection.AddSingleton<DbContextWriter, MybContextWriter>();
}
}
在 Entity Framework 6 中,我们可以添加脚手架使用的 T4 模板 运行
Install-Package EntityFramework.CodeTemplates.CSharp
但是在Entity Framework Core 中,脚手架系统似乎没有使用T4 模板,脚手架似乎也不能自定义。它似乎全部在 c# 类 中,例如。
有什么方法可以自定义脚手架的输出吗?
有一个特殊的、尚未记录的挂钩来覆盖设计时服务:
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
}
更新: 请参阅 Yehuda Goldenberg 的回答以了解在 EF Core 1.0.2+ 中执行此操作的另一种方法。
在.Net Core 1.1中,覆盖设计时服务的方法是在启动程序集中实现IDesignTimeServices接口。例如:
public class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
serviceCollection.AddSingleton<DbContextWriter, MybContextWriter>();
}
}