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。 –
更多的理由戒掉沙袋密码,不是吗? –