конфликт при миграции Code First

136
13 октября 2021, 00:20

Подскажите в чем может быть проблема, вылетает ошибка при миграции на добавление связи между таблицами

Конфликт инструкции ALTER TABLE с ограничением FOREIGN KEY "FK_dbo.Books_dbo.Authors_AuthorId". Конфликт произошел в базе данных "test2_bd", таблица "dbo.Authors", column 'Id'.

Вот два класа

public class Book
    {
        public int Id { get; set; }
        public string NameBook { get; set; }
        public int Pages { get; set; }
        public int Year { get; set; }
        public int Price { get; set; }
        public int AuthorId { get; set; }
        public Author Author { get; set; }
    }
public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

изначально создал таблицы без связей, сейчас при добавлении связи

public int AuthorId { get; set; }
public Author Author { get; set; }

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

Answer 1

Я так понимаю добавляя жесткую привязку книги к автору, при миграции уже созданные строки выдают ошибку, что FK не определен. Для связей таблиц используйте Nullable<int> или int?. И для удобства используйте ключевое слово virtual для связанного класса, он будет подтягивать его автоматически из БД. Пример:

    public class Book
    {
        public int Id { get; set; }
        public string NameBook { get; set; }
        public int Pages { get; set; }
        public int Year { get; set; }
        public int Price { get; set; }
        public int? AuthorId { get; set; }
        public virtual Author Author { get; set; }
    }
    public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public virtual ICollection<Book> Books { get; set; }
        public Author()
        {
             Books = new List<Book>();
        }
    }    

Ну и что почитать: Code First Один ко многим

READ ALSO
Как можно сформировать проверку на строку?

Как можно сформировать проверку на строку?

У меня есть проверка такого рода GetName если находит подходящую строчку в тексте path то возвращает определённый текст

216
Сборщик мусора собрал делегат который передавался в неуправляемый код, как этого не допустить?

Сборщик мусора собрал делегат который передавался в неуправляемый код, как этого не допустить?

В общем, отлаживал библиотекурешил поставить музыку которая идет в потоке на паузу, и отойти на минут 10

80
Запуск службы через консоль

Запуск службы через консоль

Как средствами С# на Linux запустить консоль и выполнить в ней определённую команду (в моём случае это запуск/остановка/проверка статуса службы...

202