Я хочу показать отношения со следующими классами, но я получил эти ошибки - PullRequest
0 голосов
/ 25 ноября 2018
public class Newtask
{
    [Key]
    public int TId { get; set; }
    public string Name { get; set; }
    public int Estimated_days_of_work { get; set; }
    public virtual ICollection<Enrollment> Enrollments { get; set; }
    public virtual ICollection<Subtask> Subtasks { get; set; }
}

public class Subtask
{
    [Key]
    public int SId { get; set; }
    public string SubName { get; set; }
    public int SEstimated_days_of_work { get; set; }
    public int NewtaskTId { get; set; }
    public virtual Newtask Newtasks { get; set; } 
}

public class SubSubtask
{
    [Key]
    public int SsId { get; set; }
    public string SubSubTaskName { get; set; }
    public int SsEstimated_days_of_work { get; set; }
    public int NewtaskTId { get; set; }
    public int SId { get; set; }
    public virtual Newtask Newtasks { get; set; }
    public virtual Subtask Subtasks { get; set; }
}

Сейчас у меня есть эти классы, я хочу показать отношения между ними, как у каждой задачи есть подзадача, и у подзадачи также есть подзадача, но когда я запускаю приложение, я получаю эти ошибки:

System.Data.SqlClient.SqlException: 'Введение ограничения FOREIGN KEY' FK_dbo.SubSubtasks_dbo.Subtasks_SId 'в таблице' SubSubtasks 'может вызывать циклы или множественные каскадные пути.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение или индекс.Смотрите предыдущие ошибки. '

Как я могу изменить это отношение?

1 Ответ

0 голосов
/ 26 ноября 2018

Ваши классы имеют циклическую зависимость, поэтому, когда вы перейдете к удалению некоторых объектов, они будут разбиты с множественной ошибкой.если вы игнорируете удаление сущностей, вы можете добавить это в конструктор моделей вашего класса dbcontext.

protected override void OnModelCreating(ModelBuilder modelbuilder)
{
foreach (var relationship in modelbuilder.Model.GetEntityTypes().SelectMany(e 
            => e.GetForeignKeys()))
{
    relationship.DeleteBehavior = DeleteBehavior.Restrict;
}

base.OnModelCreating(modelbuilder);
}

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

public class Newtask
{
    [Key]
    public int TId { get; set; }
    public string Name { get; set; }
    public int Estimated_days_of_work { get; set; }
    public virtual ICollection<Enrollment> Enrollments { get; set; }
    public virtual ICollection<Subtask> Subtasks { get; set; }
}

public class Subtask
{
    [Key]
    public int SId { get; set; }
    public string SubName { get; set; }
    public int SEstimated_days_of_work { get; set; }
    public int NewtaskTId { get; set; }
    public virtual Newtask Newtasks { get; set; } 
    public virtual Substask HasSubtask{get;set;}
}

и измените свой построитель моделей в dbset на:

modelbuilder.Entity(typeof (Subtask))
        .OnDelete(DeleteBehavior.Restrict);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...