C# EntityFramework Core настройка отношения many-to-many

Подход использую code-first. У меня есть две таблицы с отношением m2m:

public sealed record AuthorEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<BookEntity> Books { get; set; }
}

public sealed record BookEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public ICollection<AuthorEntity> Authors { get; set; }
}

Связаны они через третью:

public void Configure(EntityTypeBuilder<AuthorEntity> builder)
    {
        builder.HasMany(e => e.Books)
            .WithMany(b => b.Authors)
            .UsingEntity<Dictionary<string, object>>(
            "AuthorsBooks",
            t => t
                .HasOne<BookEntity>()
                .WithMany()
                .HasForeignKey("BookId")
                .OnDelete(DeleteBehavior.Cascade),
            t => t
                .HasOne<AuthorEntity>()
                .WithMany()
                .HasForeignKey("AuthorId")
                .OnDelete(DeleteBehavior.Cascade)
        );
    }

Код для теста:

var a = new AuthorEntity
{
    Name = "a1",
    Books = new[] { new BookEntity { Name = "b1" } }
};

db.Authors.Add(a);
db.SaveChanges();

var b = new BookEntity
{
    Name = "b2",
    Authors = new[] { new AuthorEntity { Name = "a1" } }
};

db.Books.Add(b);
db.SaveChanges();

При выполнении второго запроса в базу вылетает исключение:

Cannot insert duplicate key row in object 'dbo.Authors' with unique index 'IX_Authors_Name'. The duplicate key value is (a1).

Можно ли сконфигурировать отношение так, чтобы orm выполняла вставку в таблицу только если записи еще нет? И если нет, то как выполнять такую вставку?


Ответы (0 шт):