класс RepeatingAgendaItemModel, наследуемый от AgendaItemModel.
Важно отметить, что AgendaModule ничего не знает о RepeatingAgendaModule (конечно, наоборот, RepeatingAgendaModule будет знать о AgendaModule, поскольку он наследуется от AgendaItemModel).
Я пытаюсь объединить AgendaItemModel и RepeatingAgendaItemModel в одну и ту же таблицу базы данных, используя для каждой из них определенный дискриминатор, поскольку они оба содержат одни и те же свойства (только выполнение для RepeatingAgendaItemModel должно происходить в RepeatingAgendaModule, следовательно, никаких дополнительных свойств).Но когда я получаю все объекты AgendaItemModel в AgendaModule, я также хочу получить объекты RepeatingAgendaItemModel, несмотря на то, что эти объекты неизвестны и затем показаны в повестка дня в клиенте (основная цель того, чего я пытаюсь достичь).
TLDR; из отдельного модуля я пытаюсь добавить унаследованный объект (с помощью дискриминатора) в таблицу его базового типа, а затем получить его.
Теперь я попытался добавить это следующим образом (но запуск миграции не приводит к производные типы, которые будут добавлены):
Код: Выделить всё
public class AgendaContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasDiscriminator("Discriminator")
.HasValue("AgendaItemModel");
AddDerivedTypes(modelBuilder);
}
private void AddDerivedTypes(ModelBuilder modelBuilder)
{
var baseType = typeof(AgendaItemModel);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var derivedTypes = assemblies.SelectMany(assembly => assembly.GetTypes()).Where(t => t != baseType && baseType.IsAssignableFrom(t));
foreach (var type in derivedTypes)
{
var entityTypeBuilder = modelBuilder.Entity(type);
modelBuilder.Entity().HasDiscriminator("Discriminator").HasValue(type, type.Name);
}
}
}
Код: Выделить всё
public class RepeatingAgendaContext : AgendaContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasBaseType()
.HasDiscriminator("Discriminator")
.HasValue("RepeatingAgendaItemModel");
}
}
'System.InvalidOperationException' в Microsoft.EntityFrameworkCore.Relational.dll: 'Невозможно материализовать экземпляр сущности типа 'RepeatingAgendaItemModel'. Ни один дискриминатор не соответствует значению дискриминатора «RepeatingAgendaItemModel»
Несмотря на то, что цикл, похоже, находит эти дискриминаторы в AddDerivedTypes.
Буду очень признателен за любую помощь, я уже давно застрял на этом!
Подробнее здесь: https://stackoverflow.com/questions/787 ... criminator