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

Add entity using factory repository pattern

我有界面

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>
 {
 }

还有基础class。

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。

 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();
    }

我的entity framework知识有点生疏。不确定如何实现添加、删除方法等。请给我提示。代码片段受到热烈欢迎。谢谢

Not sure how to implement Add, Delete methods

它们已经在 RepositoryBase 中实现。

您的 CatRepository 继承自您的通用 RepositoryBase,它的通用参数设置为您的 Cat 域实体。您的 AddDelete 已经在您的 RepositoryBase class.

中实施

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