2016-06-07 11 views
9

W Entity Framework 6 możemy dodać T4 szablony rusztowanie wykorzystuje uruchamiającEntity Framework Rdzeń - Dostosuj Rusztowania

Install-Package EntityFramework.CodeTemplates.CSharp 

ale w Entity Framework Core System rusztowań nie wydaje się używać szablonów T4, ani nie wydaje się, że rusztowanie można dostosować. Wygląda na to, że wszystko jest w klasach C#, np.

https://github.com/aspnet/EntityFramework/blob/a508f37cf5a0246e9b92d05429153c3d817ad5ec/src/Microsoft.EntityFrameworkCore.Tools.Core/Scaffolding/Internal/EntityTypeWriter.cs

Czy istnieje jakiś sposób, aby dostosować wyjście z rusztowania?

Odpowiedz

6

Istnieje specjalny, jeszcze-być udokumentowane hak zastąpić usługi czasu projektowania:

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

Następnie realizować swój własny generator.

class MyEntityTypeWriter : EntityTypeWriter 
{ 
    public EntityTypeWriter(CSharpUtilities cSharpUtilities) 
     : base(cSharpUtilities) 
    { 
    } 

    // TODO: Override with custom implementation 
} 

Aktualizacja: Patrz odpowiedź Yehuda Goldenberg „s innego sposobu, aby to zrobić w EF Rdzenia 1.0.2+.

+0

OK wielką widzę nad w ScaffoldingServiceCollectionExtensions.cs jak to działa. – user917170

+0

Jednym z naszych celów w EF Core było utrzymanie otwartych i rozszerzalnych ram. Skutecznie używasz tutaj "tylnych drzwi". Obiecujemy ułatwić to za pomocą szablonów (nr [4038] (https://github.com/aspnet/EntityFramework/issues/4038)). – bricelam

+0

I to już dostępne i czy są jakieś tutoriale Chciałbym, aby wszystkie moje bazy danych poco rozszerzyły moją klasę bazową. Właściwie to myślę, że stworzę nowe pytanie dla tego –

5

W .NET Core 1.1, sposobem na nadpisanie usług czasu projektowania jest implementacja interfejsu IDesignTimeServices w zespole startowym. Na przykład:

public class MyDesignTimeServices : IDesignTimeServices 
{ 
    public void ConfigureDesignTimeServices(IServiceCollection serviceCollection) 
    { 
     serviceCollection.AddSingleton<EntityTypeWriter, MyEntityTypeWriter>(); 
     serviceCollection.AddSingleton<DbContextWriter, MybContextWriter>(); 

    } 
} 

Zobacz https://github.com/aspnet/EntityFramework/issues/5617

+1

To podejście będzie również włączone w EF Core 1.0.2 – bricelam

+1

W EF Core 2.0.0 klasy są nazywane 'CSharpDbContextGenerator' i' CSharpEntityTypeGenerator' – Jani