У меня есть 2 сущности Movie
и MovieVersion
, которые наследуют следующий абстрактный класс, определяющий свойство ID:
public interface IEntity
{
int Id { get; }
}
public abstract class EntityBase : IEntity
{
public int Id { get; set; }
}
public class Movie : EntityBase, IAggregateRoot ...
public class MovieVersion : EntityBase ...
Я настроил следующую конфигурацию:
public class MovieConfiguration : IEntityTypeConfiguration<Movie>
{
public void Configure(EntityTypeBuilder<Movie> builder)
{
builder.HasKey(m => m.Id);
builder.Property(m => m.Id).ValueGeneratedOnAdd();
builder.HasMany(m => m.MovieVersions)
.WithOne();
}
}
public class MovieVersionConfiguration : IEntityTypeConfiguration<MovieVersion>
{
public void Configure(EntityTypeBuilder<MovieVersion> builder)
{
builder.HasKey(m => m.Id);
builder.Property(m => m.Id).ValueGeneratedOnAdd();
}
}
Я пытаюсь посеять этот код:
var movieRepository = new MovieRepository(context);
var movie = new Movie("The Good, the Bad and the Ugly", 1966);
movieRepository.AddMovie(movie);
И получаю эту ошибку: «Значение не может быть нулевым. (Параметр« ключ »)». Что может пойти не так? Я думал, что раньше это работало, но теперь что-то изменилось. Я нахожусь на EF Core v3.1.1 и использую SQLite.
Для полноты вот выдержка из репозитория:
public abstract class RepositoryBase<T> where T : class, IAggregateRoot
{
private readonly ApplicationDbContext _context;
public RepositoryBase(ApplicationDbContext context)
{
_context = context ?? throw new ArgumentNullException(nameof(context));
}
protected DbSet<T> Set => _context.Set<T>();
}
public class MovieRepository : RepositoryBase<Movie>, IMovieRepository
{
public MovieRepository(ApplicationDbContext context) : base(context) {}
public void AddMovie(Movie movie)
{
Set.Add(movie);
}
}
DbContext:
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Movie> Movies { get; set; }
public DbSet<MovieVersion> MovieVersions { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
base.OnModelCreating(builder);
}
}
Seed :
context.Database.EnsureCreated();
if (context.Movies.Any()) return;
var movieRepository = new MovieRepository(context);
var movieContainerRepository = new MovieContainerRepository(context);
var movie = new Movie("The Good, the Bad and the Ugly", 1966);
movieRepository.AddMovie(movie); // throws mentioned error
Заранее спасибо!