使用工厂存储库模式添加实体

时间:2017-06-22 00:55:35

标签: c# entity-framework datacontext

我有界面。

public interface IRepository<T> where T : class
{
   void Add(T entity);
   void Update(T entity);
   void Delete(T entity);
   void Delete(Expression<Func<T, bool>> filter);

然后

 public interface ICatRepository : IRepository<Cat>
 {
 }

我也有基类。

public abstract class RepositoryBase<T> where T : class
{
    private DbContext dataContext;
    protected readonly IDbSet<T> dbset;
    protected RepositoryBase(IDatabaseFactory databaseFactory)
    {
        DatabaseFactory = databaseFactory;
        dbset = DataContext.Set<T>();
    }

    protected IDatabaseFactory DatabaseFactory
    {
        get; private set;
    }

    protected DbContext DataContext
    {
        get { return dataContext ?? (dataContext = DatabaseFactory.Get()); }
    }
    public virtual void Add(T entity)
    {
        dbset.Add(entity);           
    }
    public virtual void Update(T entity)
    {
        dbset.Attach(entity);
        dataContext.Entry(entity).State = EntityState.Modified;
    } 
    public virtual void Delete(T entity)
    {
        dbset.Remove(entity);           
    }
    public virtual void Delete(Expression<Func<T, bool>> filter)
    {
        IEnumerable<T> objects = dbset.Where<T>(filter).AsEnumerable();
        foreach (T obj in objects)
           dbset.Remove(obj);
    } 

现在我有了实现类。

 class CatRepository : RepositoryBase<Cat>, ICatRepository
 {
    public CatRepository(IDatabaseFactory databaseFactory) : base(databaseFactory)
    {

    }

    public void Add(Cat entity)
    {
        throw new NotImplementedException();
    }

    public void Delete(Cat entity)
    {
        throw new NotImplementedException();
    }

    public void Delete(Expression<Func<Cat, bool>> filter)
    {
        throw new NotImplementedException();
    }

我的实体框架知识有点生疏。不知道如何实现添加,删除方法等。请给我一个提示。我们热烈欢迎代码片段。感谢。

2 个答案:

答案 0 :(得分:0)

  

不确定如何实施添加,删除方法

它们已经在RepositoryBase中实现。

答案 1 :(得分:0)

您的CatRepository继承自您的通用RepositoryBase,其通用参数设置为您的Cat域实体。您的Add课程已经实施了DeleteRepositoryBase

通用存储库的目的是将通用逻辑组合在一起,例如Add()Delete()AddRange()DeleteRange()以及CatRepository的目的是具有非常具体的实现,如GetNaughtiestCat()方法。如果您没有这些实现,您仍然可以使用GenericRepository并将通用参数设置为Cat,则需要删除abstract关键字。