我将在我的数据访问层中使用仓储和工作单元来完成这个任务,请看一个联系人聚合根。
public interface IAggregateRoot
{
}
这是我的通用存储库接口:
public interface IRepository<T>
{
IEnumerable<T> GetAll();
T FindBy(params Object[] keyValues);
void Add(T entity);
void Update(T entity);
void Delete(T entity);
}
和我的POCO Contact类在Model中
public class Contact :IAggregateRoot
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public DateTime CreationTime { get; set; }
}
这是我的IContactRepository,它继承自IRepository,可能还有它自己的方法。
public interface IContactRepository : IRepository<Contact>
{
}
现在我已经在IUitOfWork和UnitOfwork中完成了这样的操作
public interface IUnitOfWork
{
IRepository<Contact> ContactRepository { get; }
}
public class UnitOfWork : IUnitOfWork
{
private readonly StatosContext _statosContext = new StatosContext();
private IRepository<Contact> _contactUsRepository;
public IRepository<Contact> ContactRepository
{
get { return _contactUsRepository ?? (_contactUsRepository = new Repository<Contact>(_statosContext)); }
}
}
还有关于我的代码库
public class Repository<T> : IRepository<T> where T : class, IAggregateRoot
{
//implementing methods
}
我可以使用Service中的UnitOfwork访问Repositories来执行所有的CRUD操作,例如:
_unitOfWork.ContactRepository.Add(contact);
_unitOfWork.SaveChanges();
但是我想要像这样做
_
ContactRepository.Add(contact);
_unitOfWork.SaveChanges();
通过_ContactRepository而不是_unitOfWork.ContactRepository来获取CRUD和通用方法 因为我想要获得ContactRepository的一些特定查询方法, 有人可以帮忙吗?
IDbContext
接口,并通过该接口使用DbContext
。由于DbContext
在开箱即用时就是 UoW 和存储库的结合体,所以这种方法非常简单和有效... - Patryk Ćwiek