Ошибка добавления контроллера из-за отношений модели - PullRequest
0 голосов
/ 21 сентября 2019

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

У меня есть две простые модели: сценарий и условие.Сценарий может состоять из нескольких Условий, но Условие будет связано только с одним Сценарием.(Мой DbContext - это MySQL, а не SQL Server).

Ошибка: при запуске выбранного генератора кода произошла ошибка: «Отношение« Условие »к сценарию. Условия со свойствами внешнего ключа {'ScenarioId: int'} не могут быть нацелены на первичный ключ {" Id ":int}, потому что это не совместимо.Настройте основной ключ или набор совместимых свойств внешнего ключа для этого отношения. '

(У меня не было проблем с созданием ScenariosController и возвратом данных из API. Там, где я ожидал, что массив условий будет, тамбыли только нулевые значения. Кроме того, ошибка произошла при попытке добавить ConditionController.)

public class Scenario
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Description { get; set; }

        public ICollection<Condition> Conditions { get; set; }
    }

public class Condition
    {
        public int Id { get; set; }
        public int ScenarioId { get; set; }
        public string Type { get; set; }
        public string Preference { get; set; }

        [ForeignKey("ScenarioId")]
        public Scenario Scenario { get; set; }
    }


public class EvaluatorContext : DbContext
    {
        public EvaluatorContext(DbContextOptions<EvaluatorContext> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

            modelBuilder.Entity<Condition>()
                .HasOne(s => s.Scenario)
                .WithMany()
                .HasPrincipalKey(s => s.Id);

            modelBuilder.Entity<Scenario>()
                .HasMany(s => s.Conditions)
                .WithOne()
                .HasForeignKey(c => c.ScenarioId);
        }

        public DbSet<Scenario> Scenario { get; set; }
        public DbSet<Condition> Condition { get; set; }
    }

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

1 Ответ

0 голосов
/ 22 сентября 2019

Я считаю, что проблема с невозможностью добавить контроллер с генератором кода была связана с тем, как я определял отношения с Fluent API в OnModelCreatingMethod ().Я избавился от них, и ошибка ушла.Как оказалось, они не обязательны для того, чтобы заставить контроллер работать на самом деле.

У меня также была другая проблема ... Оператор .Include () не работал для фактической загрузки связанных сущностей.Ответ на этот вопрос, по крайней мере, в любом случае, здесь:

ASP.NET Core API, возвращающий только первый результат списка

...