使用工厂存储库模式添加实体
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
域实体。您的 Add
和 Delete
已经在您的 RepositoryBase
class.
中实施
通用存储库的目的是将通用逻辑组合在一起,例如 Add()
、Delete()
、AddRange()
、DeleteRange()
,以及您的 CatRepository
是像 GetNaughtiestCat()
方法一样有非常具体的实现。如果您没有这些实现,您仍然可以使用 GenericRepository
并将通用参数设置为 Cat
,您需要删除 abstract
关键字。
我有界面
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
域实体。您的 Add
和 Delete
已经在您的 RepositoryBase
class.
通用存储库的目的是将通用逻辑组合在一起,例如 Add()
、Delete()
、AddRange()
、DeleteRange()
,以及您的 CatRepository
是像 GetNaughtiestCat()
方法一样有非常具体的实现。如果您没有这些实现,您仍然可以使用 GenericRepository
并将通用参数设置为 Cat
,您需要删除 abstract
关键字。