У меня есть база данных, содержащая две таблицы, Книги и Пользователи, с отношением один ко многим. Когда я применил начальную миграцию, содержащую только Книги, она работала нормально. Когда я добавил и применил новую миграцию с изменениями пользователя, я получаю это исключение при попытке добавить объекты в базу данных:
"SqlException: оператор MERGE конфликтует с ограничением FOREIGN KEY" FK_Books_Users_UserId " Конфликт произошел в базе данных "Library.Database", таблице "dbo.Users", столбце "UserId" "
Модель User
имеет список книг:
public ICollection<Book> BooksList { get; } = new List<Book>();
Модель Book
имеет один User
и UserId
:
public int? UserId { get; set; }
public User User { get; set; }
Я попытался добавить это в контекст базы данных безуспешно:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasMany(u => u.BooksList)
.WithOne(b => b.User);
}
Две таблицы выглядят так после последней примененной миграции:
CREATE TABLE [dbo].[Books]
(
[BookId] INT IDENTITY (1, 1) NOT NULL,
[IsbnNumber] NVARCHAR(MAX) NOT NULL,
[Title] NVARCHAR(MAX) NOT NULL,
[Publisher] NVARCHAR(MAX) NOT NULL,
[PublishedDate] DATETIME2(7) NOT NULL,
[Pages] INT NOT NULL,
[Loaned] BIT NOT NULL,
[CoverImageUrl] NVARCHAR(MAX) NULL,
[UserId] INT NULL,
CONSTRAINT [PK_Books]
PRIMARY KEY CLUSTERED ([BookId] ASC),
CONSTRAINT [FK_Books_Users_UserId]
FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([UserId])
)
CREATE TABLE [dbo].[Users]
(
[UserId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR(MAX) NOT NULL,
[LastName] NVARCHAR(MAX) NOT NULL,
[DateOfBirth] DATETIME2(7) NOT NULL,
[Username] NVARCHAR(MAX) NOT NULL,
[PasswordHash] NVARCHAR(MAX) NOT NULL,
[Email] NVARCHAR(MAX) NOT NULL,
CONSTRAINT [PK_Users]
PRIMARY KEY CLUSTERED ([UserId] ASC)
)
В базе данных нет существующих данных. Я удалил текущий проект миграции и сделал новый без удачи.