C# 实体框架核心-定制脚手架

C# 实体框架核心-定制脚手架,c#,entity-framework-core,C#,Entity Framework Core,在实体框架6中,我们可以通过运行 Install-Package EntityFramework.CodeTemplates.CSharp 但在实体框架核心中,脚手架系统似乎没有使用T4模板,也没有脚手架可以定制。这似乎都是c类的 有什么方法可以自定义脚手架的输出吗?有一个特殊的、尚未记录的钩子,用于覆盖设计时服务: class Startup { public static void ConfigureDesignTimeServices(IServiceCollection se

在实体框架6中,我们可以通过运行

Install-Package EntityFramework.CodeTemplates.CSharp
但在实体框架核心中,脚手架系统似乎没有使用T4模板,也没有脚手架可以定制。这似乎都是c类的


有什么方法可以自定义脚手架的输出吗?

有一个特殊的、尚未记录的钩子,用于覆盖设计时服务:

class Startup
{
    public static void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
}

更新:有关在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>();

    }
}
公共类MyDesignTimeServices:IDesignTimeServices
{
public void配置DesignTimeServices(IServiceCollection服务集合)
{
serviceCollection.AddSingleton();
serviceCollection.AddSingleton();
}
}

请参见

好的,我可以在ScaffoldingServiceCollectionExtensions.cs中看到它是如何工作的。我们在EF Core中的目标之一是保持框架的开放性和可扩展性。你实际上是在利用“后门”。我们承诺通过对模板的支持(问题)使这变得更容易。我现在可以使用它,并且是否有任何教程我希望我的所有poco数据库类扩展我的基类。实际上,我想我会提出一个新的问题,这个方法也将在EF Core 1.0.2中启用。在EF Core 2.0.0中,这些类被称为
CSharpDbContextGenerator
csharpentyTypeGenerator
public class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
    {
        serviceCollection.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>();
        serviceCollection.AddSingleton<DbContextWriter, MybContextWriter>();

    }
}