древовидная структура - PullRequest
0 голосов
/ 24 мая 2019

Я использую C # с ядром Entity Framework и SQL Server.

Я хочу смоделировать что-то похожее на составную структуру, но у меня есть некоторые проблемы с сохранением структуры в репозитории.

Это ошибка, которую я получаю:

Невозможно сохранить изменения, поскольку в данных, которые будут сохранены, обнаружена циклическая зависимость: 'LogicAnd [Added] ParentComponent {' ParentComponentId1 '}<- Условие [Добавлено] <- CompDer {'CompDerId'} LogicAnd [Добавлено] '. </p>

Базовый класс:

public abstract class Component
{
    public Guid Id { get; set; }

    public int ParentComponentId { get; set; }
    public virtual Component ParentComponent { get; set; }

    public  abstract bool Evaluate();
}

Класс листа:

public class Condition : Component
{
    public virtual ValueExpression ValueIzq { get; set; }
    public virtual ValueExpression ValueDer { get; set; }
    public String Operation {get;set;}
    public override bool Evaluete(){....}
}

Абстрактный составной класс:

public abstract class LogicExpression : Component
{
    public virtual Component CompIzq { get; set; }
    public virtual Component CompDer { get; set; }

}

Составные производные классы:

public class LogicAnd : LogicExpression
{
    public override bool Evaluete()
    {
           .....
    }
}


public class LogicOr : LogicExpression
{
    public override bool Evaluete()
    {
           .....
    }
}

Контекст:

public DbSet<Condition> Conditions { get; set; }
public DbSet<LogicAnd> LogicAnds { get; set; }
public DbSet<LogicOr> LogicOrs { get; set; }


protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Component>().ToTable("Components");
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseLazyLoadingProxies();
}

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...