Я новичок в Entity Framework Core, и у меня есть следующие классы, которые я пытаюсь настроить с помощью Fluent API. EntityType - это поле дискриминатора, а EntityReference должно быть внешним ключом для Mov ie или Book в зависимости от EntityType.
Схема базы данных
public abstract class Review
{
public Guid ReviewId { get; set; }
public Guid EntityReference { get; set; }
public string EntityType { get; set; }
public string Comments{ get; set; }
}
public MovieReview: Review {}
public BookReview: Review {}
public class Movie
{
public Guid MovieId { get; set; }
public string MovieTitle { get; set; }
...
ICollection<MovieReview> Reviews {get; set;}
}
public class Book
{
public Guid BookId { get; set; }
public string BookTitle { get; set; }
...
ICollection<BookReview> Reviews {get; set;}
}
Классы конфигурации:
public class ReviewConfiguration : IEntityTypeConfiguration<Review>
{
public void Configure(EntityTypeBuilder<Review> builder)
{
builder.ToTable("Review");
builder.HasKey(o => o.ReviewId);
builder.HasDiscriminator<string>(o => o.EntityType)
.HasValue<Movie>("Movie")
.HasValue<Book>("Book");
}
}
public class MovieConfiguration : IEntityTypeConfiguration<Movie>
{
public void Configure(EntityTypeBuilder<Movie> builder)
{
builder.ToTable("Movie");
builder.HasKey(o => o.MovieId);
...
builder.HasMany(o => o.MovieReviews)
.WithOne(o => o.Movie)
.HasForeignKey(v => v.EntityReference);
}
}
public class BookConfiguration : IEntityTypeConfiguration<Book>
{
public void Configure(EntityTypeBuilder<Book> builder)
{
builder.ToTable("Book");
builder.HasKey(o => o.BookId);
...
builder.HasMany(o => o.BookReviews)
.WithOne(o => o.Movie)
.HasForeignKey(v => v.EntityReference);
}
}
Когда я пытаюсь добавить / обновить рецензию на книгу, я получаю сообщение об ошибке:
Оператор INSERT конфликтует с ограничением FOREIGN KEY «FK_Review_Book_EntityReference». Конфликт произошел в базе данных, таблица «Книга», столбец «BookId».
Я не могу вносить изменения в таблицы базы данных. Есть ли способ использовать свободную конфигурацию api, чтобы гарантировать, что EntityReference будет связываться с MovieId, когда EntityType имеет значение «Mov ie» и игнорировать ограничение FK, FK_Review_Book_EntityReference и аналогично для Book?