我将在我的数据访问层中使用存储库和 UnitOfwork 来执行此操作,看看一个联系人聚合根
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 联系课程
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 访问存储库来执行所有 CRUD 操作,例如:
_unitOfWork.ContactRepository.Add(contact);
_unitOfWork.SaveChanges();
但我想这样做
_
ContactRepository.Add(contact);
_unitOfWork.SaveChanges();
(通过_unitOfWork.ContactRepository 的_ContactRepository No 获取CRUD 和通用方法) 因为我想获取一些特定查询的ContactRepository 方法,有人帮忙吗??