Я использую основные инструменты Entity Framework для создания сущностей. и DBContext из существующей базы данных.
Scaffold-DbContext "Server=XXXXXX;Database=MyDB;User ID=xxxx;Password=xxxxxxx" Microsoft.EntityFrameworkCore.SqlServer -ContextDir .-OutputDir Entities -Force
Это работает. Но есть ли способ собрать все сущности с известным интерфейсом? Итак, у меня есть интерфейс IEntityBase
, и я хочу, чтобы все объекты имели этот интерфейс.
Примечание. Этот вопрос относится к EF Core 2+ и скаффолдингу.
Обновление 1
Итак, согласно SO Suggesion я создал CSharpEntityTypeGenerator
и IDesignTimeServices
Принятый ответ недействителен для EF Core > 2.*, поэтому я использую предложение @Chris Peacock
public class MyEntityTypeGenerator: CSharpEntityTypeGenerator
{
public MyEntityTypeGenerator(ICSharpHelper cSharpHelper)
: base(cSharpHelper)
{
}
public override string WriteCode(IEntityType entityType, string @namespace, bool useDataAnnotations)
{
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);
}
}
public class MyDesignTimeServices: IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<ICSharpEntityTypeGenerator, MyEntityTypeGenerator>();
}
}
Есть одно изменение, которое я должен был сделать. Конструктор CSharpEntityTypeGenerator
принимает в качестве параметра ICSharpHelper
вместо ICSharpUtilities
Эти два класса находятся в сборке Data
, которая не является стартовым проектом.
В консоли диспетчера пакетов я снова выполнил команду создания лесов. Однако я не вижу, чтобы сгенерированные объекты имели базовый класс.
Как инфраструктура строительных лесов узнает, что нужно использовать мой пользовательский генератор? Я добавляю генератор в serviceCollection
, но похоже, что код никогда не выполняется
Я что-то упускаю?
.. : IEntityBase
ко всем вашим классам, созданным из базы данных? - person Adam Vincent   schedule 06.06.2019