通用存储库上的 EF 迁移

问题描述 投票:0回答:1

我正在使用实体框架创建一个通用存储库。看起来像这样:

    public abstract class EntityRepository<TEntity> : IEntityRepository<TEntity> where TEntity : Entity
    {
        protected DataContext Context { get; set; }

        protected DbSet<TEntity> EntitySet { get; set; }

        public EntityRepository(DataContext context)
        {
            this.Context = context;
            this.EntitySet = context.Set<TEntity>();
        }

        //CRUD methods omitted for simplicity
}

那么我可以创建一个继承自这个存储库并添加一些其他功能/逻辑的存储库......

public class VariationsRepository : EntityRepository<Variation>, IVariationsRepository

问题是我正在使用代码优先方法,当我创建迁移时,数据库中不会创建任何表...我如何确保迁移为具有存储库的每个实体创建相应的表? (应用程序的所有模型都会有通用存储库的实现)

entity-framework-core entity-framework-migrations repository-pattern
1个回答
0
投票

您可以通过利用上下文的覆盖来定义方法

OnModelCreating
上的每个实体。

public class YourContext : DbContext
{
    public YourContext (DbContextOptions options) : base(options) { }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .HasKey(o => o.Id);

        modelBuilder.Entity<User>()
            .Property(o => o.Name)
            .IsRequired()
            .HasMaxLength(100);
    }

}

我更喜欢以这种方式配置我的实体,而不是使用 DataAnnotation 属性。

你也可以想“好吧,但是如果我有很多实体,这个配置方法将会很大”。 在这种情况下,您可以像本文中那样分成多个类。

© www.soinside.com 2019 - 2024. All rights reserved.