класс RepeatingAgendaItemModel, наследуемый от AgendaItemModel .
Важно отметить, что AgendaModule ничего не знает о RepeatingAgendaModule (наоборот, RepeatingAgendaModule будет знать о AgendaModule, поскольку RepeatingAgendaItemModel наследует от AgendaItemModel).
Я пытаюсь объединить AgendaItemModel и RepeatingAgendaItemModel в одной и той же таблице базы данных, используя для каждого из них отдельный дискриминатор, поскольку они оба содержат одни и те же свойства (в повторяющемся модуле должно происходить только выполнение для RepeatingAgendaItemModule, следовательно, никаких дополнительных свойств).
Но когда я получаю все объекты 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' in Microsoft.EntityFrameworkCore.Relational.dll: 'Unable to materialize entity instance of type 'RepeatingAgendaItemModel'. No discriminators matched the discriminator value 'RepeatingAgendaItemModel'.'
Буду очень признателен за любую помощь, я' я застрял на долгое время!
Подробнее здесь: https://stackoverflow.com/questions/787 ... iminator-a