Я думаю, что эти опции должны были быть предоставлены как часть инструмента EF Scaffolding по умолчанию.
Но вот мой код.Я использую Microsoft.EntityFrameworkCore.Design 2.2.4
и Microsoft.EntityFrameworkCore.SqlServer 2.2.4
и, исходя из моего опыта работы с .NET Core, это может измениться в будущей версии
CSharpEntityTypeGenerator
public class MyEntityTypeGenerator: CSharpEntityTypeGenerator
{
public MyEntityTypeGenerator(ICSharpHelper cSharpUtilities)
: base(cSharpUtilities)
{
}
public override string WriteCode(IEntityType entityType, string @namespace, bool useDataAnnotations)
{
Console.WriteLine(entityType.Name);
string code = base.WriteCode(entityType, @namespace, useDataAnnotations);
var oldString = "public partial class " + entityType.Name;
var newString = "public partial class " + entityType.Name + " : EntityBase";
return code.Replace(oldString, newString);
}
}
По умолчанию строительные лесагенерирует классы с тем же именем, что и имя таблицы.В нашем случае имена таблиц Pluralize, но нам нужно имя класса Singularize.Таким образом, вы должны реализовать Microsoft.EntityFrameworkCore.Design.IPluralizer
.Я использовал утилиту Inflator .Тем не менее, обратите внимание, что я не мог добавить Inflector
, используя Nuget в проекте .Net Core.Похоже, он пока не поддерживает .NET Core.Поэтому я добавил единственный кодовый файл вместо этого в моем проекте.
IPluralizer
public class MyPluralizer : IPluralizer
{
public string Pluralize(string identifier)
{
return Inflector.Pluralize(identifier) ?? identifier;
}
public string Singularize(string identifier)
{
return Inflector.Singularize(identifier) ?? identifier;
}
}
IDesignTimeServices
Вам нужно добавить этот класс в автозагрузку проекта.Первоначально у меня был этот класс в том же проекте, что и другие классы, но это не сработало.Я переместил этот класс в автозагрузку проекта (в моем случае это проект ASP.NET Core), и он работал
public class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
// Start debugger
System.Diagnostics.Debugger.Launch();
serviceCollection.AddSingleton<ICSharpEntityTypeGenerator, MyEntityTypeGenerator>();
serviceCollection.AddSingleton<IPluralizer, MyPluralizer>();
}
}