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 выполняла вставку в таблицу только если записи еще нет? И если нет, то как выполнять такую вставку?