Можно ли сохранить такую совокупность классов в БД C#+EF?

В общем, есть вот такая структура: Структура

Используя такую структуру EF не позволяет мне создать базу данных, так как в сущности ExpertSystem три свойства одного и того же типа, на примерном коде будет понятнее: Сущности:

public class ExpertSystem
{
    public int Id { get; set; }

    public string Name { get; set; }

    public List<Operation> InitialOperations { get; set; }

    public List<Operation> CompletionOperations { get; set; }

    public List<Operation> VariablesOperations { get; set; }
}
public class Input : Operation
{
    public string Type { get; set; }

    public string Text { get; set; }

    public Variable Variable { get; set; }

    public int VariableId { get; set; }
}
public class Output : Operation
{
    public string Text { get; set; }
    public Variable? Variable { get; set; }
    public int? VariableId { get; set; }
}
public class Operation
{
    public int Id { get; set; }

    public ExpertSystem ExpertSystem { get; set; }

    public int ExpertSystemId { get; set; }
}
public class Variable
{
    public int Id { get; set; }

    public string Name { get; set; }
}

При попытке создать БД вылетел Exception:

System.InvalidOperationException: "Unable to determine the relationship represented by navigation 'Expert System.CompletionOperations' of type 'List'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'." Попробовал настроить через метод OnModelCrating():

public class ApplicationDbContext : DbContext
{
    public DbSet<ExpertSystem> ExpertSystems { get; set; }
    public DbSet<Operation> Operations { get; set; }
    public DbSet<Output> Outputs { get; set; }
    public DbSet<Input> Inputs { get; set; }
    public DbSet<Variable> Variables { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
        Database.EnsureDeleted();
        Database.EnsureCreated();
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ExpertSystem>()
            .HasMany(e => e.InitialOperations)
            .WithOne()
            .HasForeignKey(o => o.ExpertSystemId)
            .OnDelete(DeleteBehavior.Cascade);

        modelBuilder.Entity<ExpertSystem>()
            .HasMany(e => e.CompletionOperations)
            .WithOne()
            .HasForeignKey(o => o.ExpertSystemId)
            .OnDelete(DeleteBehavior.Cascade);

        modelBuilder.Entity<ExpertSystem>()
            .HasMany(e => e.VariablesOperations)
            .WithOne()
            .HasForeignKey(o => o.ExpertSystemId)
            .OnDelete(DeleteBehavior.Cascade);
    }
}

Все равно та же ошибка. Можно как нибудь это исправить? Мне необходимо в сущности экспертной системы разделить связи с операциями на блоки.


Ответы (0 шт):