3
我想通過使用我可以從中繼承的通用回購簡化我現有的回購。問題是我無法弄清楚如何編寫一些我的基類方法。我目前有:EF4:如何使用通用存儲庫模式?
public interface IRepository<T> : IDisposable where T : class
{
IQueryable<T> GetAll();
T GetSingle(int id);
T GetSingle(string slug);
void Save(T entity);
}
public class HGRepository<T> : IRepository<T> where T : class
{
protected HGEntities _siteDB;
protected IObjectSet<T> _objectSet;
public HGRepository(HGEntities context)
{
_siteDB = context;
_objectSet = _siteDB.CreateObjectSet<T>();
}
public IQueryable<T> GetAll()
{
return _objectSet;
}
public T GetSingle(int id)
{
return null;
}
public T GetSingle(string slug)
{
return null;
}
public void Save(T entity)
{
// code to save entity
}
public void Dispose()
{
_siteDB = null;
}
}
我的困惑在於我GetSingle()
和Save()
方法。他們需要依賴的信息與每種類型的T
略有不同。從我的非通用回購例如:
public Article GetArticle(int id)
{
return _siteDB.Articles.SingleOrDefault(a => a.ArticleID == id);
}
public Article GetArticle(string slug)
{
return _siteDB.Articles.SingleOrDefault(a => a.Slug == slug);
}
public void SaveArticle(Article article)
{
if (article.ArticleID > 0)
{
_siteDB.ObjectStateManager.ChangeObjectState(article, System.Data.EntityState.Modified);
}
else
{
_siteDB.Articles.AddObject(article);
}
_siteDB.SaveChanges();
}
正如你所看到的,文章有自己的,特定的ID。我的其他實體也是一樣(例如,新聞項目具有NewsID屬性)。
我該如何製作一個抽象的基礎方法,可以將其調整爲更具體的版本?
第一個問題應該是[_why_使用存儲庫(http://stackoverflow.com/a/5488947/861716)。 –
偉大的鏈接。也就是說,我的項目非常簡單,我的後端實際上只是簡單的CRUD功能。它沒有DDD。 –
更多的理由戒掉沙袋密碼,不是嗎? –