實體框架核心 - 自定義腳手架

c# entity-framework-core

在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<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>();

    }
}

請參閱https://github.com/aspnet/EntityFramework/issues/5617



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因