entity framework核心 – 自定义脚手架
在Entity Framework 6中,我们可以通过运行添加脚手架使用的T4模板
Install-Package EntityFramework.CodeTemplates.CSharp
但是在Entity Framework Core中,脚手架系统似乎没有使用T4模板,看起来脚手架也不能定制。 它似乎都在c#类中,例如。
https://github.com/aspnet/EntityFramework/blob/a508f37cf5a0246e9b92d05429153c3d817ad5ec/src/Microsoft.EntityFrameworkCore.Tools.Core/Scaffolding/Internal/EntityTypeWriter.cs
有没有办法自定义脚手架的输出?
有一个特殊的,尚未被记录的钩子来覆盖设计时服务:
class Startup { public static void ConfigureDesignTimeServices(IServiceCollection services) => services.AddSingleton(); }
然后实现自定义生成器。
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(); serviceCollection.AddSingleton(); } }
请参阅https://github.com/aspnet/EntityFramework/issues/5617