我在.Net4.0网络表单(非MVC!)应用程序中使用EF4.3.1。
我倾向于将存储库模式与IUnitOfWork接口一起使用。但我想知道我是否遵循最佳实践,特别是因为我所遵循的大多数示例都基于MVC应用程序。
我会说它只是一个小型的网络应用程序,因此可能会影响解决方案的选择。
该解决方案目前有3个项目,模型,逻辑和站点。 Model包含codefirst实体和IUnitOfWork接口。逻辑包含存储库和服务层。网站显然包含网站,代码隐藏等。
我不使用任何第三方注入实用程序(ninject等)。我用IUnitOfWork手动注入存储库,即
public BookingRepository(IUnitOfWork unitOfWork)
如果IUnitOfWork也存在于Site项目中,或者仅存在于Logic和Model层中,我不太清楚如何处理服务层。
目前,我将一个存储库和一个工作单元注入服务,即
public BookingService(IUnitOfWork unitOfWork,IBookingRepository存储库,IAppSettings appSettings)
但这意味着提交(保存到数据库)是在站点级别完成的,但我想知道是否应该在服务层中完成。这也意味着,因为我的IUnitOfWork是在我的模型层中声明的,所以我也需要在我的网站中引用Model。
我能做得更好吗?我做对了吗?洛尔
答案 0 :(得分:4)
这是一个很好的资源,可以开始了解这些模式如何一起使用。它适用于MVC和Web窗体开发。 Implementing the Repository and Unit of Work Patterns in an ASP.NET MVC Application
public class UnitOfWork : IDisposable
{
private DbContext _context;
private PersonRepository _personRepository;
private CompanyRepository _companyRepository;
public UnitOfWork(DbContext context)
{
this._context = context;
}
public void Commit()
{
_context.SaveChanges();
}
// We lazy-load our repositories...
public PersonRepository PersonRepository
{
get
{
if (this._personRepository == null)
{
this._personRepository = new PersonRepository(context);
}
return _personRepository;
}
}
public CompanyRepository
{
get
{
if (this._companyRepository == null)
{
this._companyRepository = new CompanyRepository(context);
}
return _companyRepository;
}
}
//IDisposable implementation removed for brevity...
}