Не удалось заполнить базу данных данными с отношением, используя подход «сначала код» - PullRequest
0 голосов
/ 15 марта 2019

База данных имеет две таблицы Coach и CoachType (см. Ниже).Можно сначала создать эти две таблицы с кодом (Add-Migrations, а затем Update-Database).

public class Coach
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }

        [ForeignKey("FK_CoachType_Id")]
        public int CoachTypeId { get; set; }

        public virtual CoachType coachtype { get; set; }
    }

public class CoachType
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id{ get; set; }
        public string Name { get; set; }
    }

Но когда я пытаюсь заполнить данные некоторыми данными по умолчанию, он показывает сообщение об ошибке:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_coaches_coachtypes_CoachTypeId". The conflict occurred in database "MyDatabase", table "dbo.CoachType", column 'Id'.
The statement has been terminated.

Вот мой код с данными для заполнения таблиц:

        modelBuilder.Entity<CoachType>().HasData(new CoachType
        {
            CoachTypeId = 1,
            Name = "Name"
        });

        modelBuilder.Entity<Coach>().HasData(new Coach
        {
            Id = 1,
            Name = "Name",
            CoachTypeId = 1
        });`enter code here`

Я посмотрел в Google и попробовал кое-что, но продолжаю получать это сообщение.

1 Ответ

0 голосов
/ 15 марта 2019

Столбец Id таблицы CoachType генерируется автоматически, поэтому независимо от значения, которое вы назначаете для Id, оно игнорируется, поэтому при вставке CoachType есть вероятность, что вставленная запись Id не будет 1. Следовательно, при попытке вставить Coach с CoachTypeId, равным 1, выдается ошибка конфликта внешнего ключа.
Одно из возможных решений - сделать столбец Id для CoachType неидентичным.
Кроме того, я не знаю, почему вы написали CoachTypeId вместо Id.

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