我正在閱讀關於存儲庫模式的設計。 This article非常好,但我不明白構造函數中的一些東西。從通用接口繼承的泛型類中混淆字段賦值
在此代碼:
public interface IRepository<T> where T : class
{
IQueryable<T> GetAll();
T GetById(int id);
void Add(T entity);
void Update(T entity);
void Delete(T entity);
void Delete(int id);
}
/// <summary>
/// The EF-dependent, generic repository for data access
/// </summary>
/// <typeparam name="T">Type of entity for this Repository.</typeparam>
public class MyRepository<T> : IRepository<T> where T : class
{
public MyRepository(DbContext dbContext)
{
if (dbContext == null)
throw new ArgumentNullException("Null DbContext");
DbContext = dbContext;
DbSet = DbContext.Set<T>();
}
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public virtual IQueryable<T> GetAll()
{
return DbSet;
}
public virtual T GetById(int id)
{
return DbSet.Find(id);
}
public virtual void Add(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Detached)
{
dbEntityEntry.State = EntityState.Added;
}
else
{
DbSet.Add(entity);
}
}
public virtual void Update(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
DbSet.Attach(entity);
}
dbEntityEntry.State = EntityState.Modified;
}
public virtual void Delete(T entity)
{
DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
if (dbEntityEntry.State != EntityState.Deleted)
{
dbEntityEntry.State = EntityState.Deleted;
}
else
{
DbSet.Attach(entity);
DbSet.Remove(entity);
}
}
public virtual void Delete(int id)
{
var entity = GetById(id);
if (entity == null) return; // not found; assume already deleted.
Delete(entity);
}
}
在其構造函數中,我讀到:
DbContext = dbContext;
DbSet = DbContext.Set<T>();
也許這意味着什麼,但它沒有任何意義,我因爲DbContext
是一類不一個存儲對象的引用的變量。我總是繼承DbContext
並創建我自己的DbContext
,然後創建它的一個實例/元素。這裏有什麼特別的含義嗎?我很奇怪,爲什麼作者沒有寫這樣這些行:
MyDbContext dbContext = new MyDbContext();
等
感謝
你已經張貼不會編譯版本庫的代碼,它更有意義,如果類實際上有一個在構造函數中被賦予的屬性如鏈接文章中所述。 – 2014-11-05 10:19:58
我已經添加了接口和整個類的定義,但還有更多的代碼,我不確定還需要什麼。隨意做進一步的修改。 – Celdor 2014-11-05 10:35:54