I'm trying to make a universal 3-tier application with generic repositories for any data provider/orm. I just rewrote the code and got stuck on the error of Object reference not set to an instance of an object while trying make action in DbSet. I'm completely confused.. at least nudge me in the right direction.
Repository.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();
}
}
AppContext.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();
}
Configuration.cs
class Configuration : DbMigrationsConfiguration<AppContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(AppContext context)
{
}
}