我正在尝试为任何数据提供者/orm 制作一个具有通用存储库的通用 3 层应用程序。我只是重写了代码,并在尝试在 DbSet 中执行操作时遇到了对象引用未设置为对象实例的错误。我完全糊涂了……至少把我推向正确的方向。
存储库.cs
 public class Repository<T> : IRepository<T> where T : class
{
    public IUnitOfWork UnitOfWork { get; set; }
    private IDbSet<T> _objectset;
    private IDbSet<T> DbSet
    {
        get { return _objectset ?? (_objectset = UnitOfWork.Context.Set<T>()); }
    }
public List<T> GetAll()
    {
        try
        {
            return DbSet.ToList();
        }
        catch (Exception)
        {
            throw new Exception("Error in repository while attempts get all elements");
        }
    }
}
EFUnitOfWork.cs
 public class EfUnitOfWork : IUnitOfWork
{
    public EfUnitOfWork()
    {
        Context = new AppContext();
    }
    public DbContext Context { get; set; }
    public void Commit()
    {
        Context.SaveChanges();
    }
    public bool LazyLoadingEnabled
    {
        get { return Context.Configuration.LazyLoadingEnabled; }
        set { Context.Configuration.LazyLoadingEnabled = value; }
    }
    public void Dispose()
    {
        Context.Dispose();
    }
}
应用上下文.cs
 public class AppContext : DbContext, IDbContext
{
    public AppContext()
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<AppContext,            Configuration>());
        Configuration.ProxyCreationEnabled = false;
    }
    public DbSet<Logic> Logics { get; set; }
    public DbSet<Category> Categories { get; set; }
    public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
    {
        return base.Set<TEntity>();
    }
}
IDbContext.cs
public interface IDbContext
{
    IDbSet<TEntity> Set<TEntity>() where TEntity : class;
    int SaveChanges();
    void Dispose();
}
配置.cs
class Configuration : DbMigrationsConfiguration<AppContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        AutomaticMigrationDataLossAllowed = true;
    }
    protected override void Seed(AppContext context)
    {
    }
}