我正在实施一个generic repository pattern
,我现在做了很多次,但每次我这样做都会让我烦恼。
如果我有如下数据库设计。 (所有表格彼此相关。)我打电话如下
public IEnumerable<Domain> GetRealEstate()
{
return _repository.GetAll();
}
我可以从那一个电话中获得所有模型(EF
的奇迹)。让我烦恼的是,我必须在方法调用中说Domain
,从域实体我将得到所有相关实体(Lazy loading
)Companies
等。使用domain entity
来获取所有公司等等感觉是错误的。我使用的回购模式是直截了当的。
有没有更好的方法来编写方法,使它看起来不那么奇怪?
以下是我的示例代码
控制器
[RoutePrefix("api/realestate")]
public class RealEstateController : ApiController
{
private readonly IRealEstateService _service;
public RealEstateController(IRealEstateService service)
{
_service = service;
}
[Route("")]
public Task<Domain> GetRealEstates()
{
var collection = _service.GetRealEstate();
return null;
}
[Route("{domainName}")]
public Task<Domain> GetRealEstate(string domainName)
{
}
}
服务
public class RealEstateService : IRealEstateService
{
private readonly IRealEstateRepository _repository;
public RealEstateService(IRealEstateRepository repository)
{
_repository = repository;
}
public IEnumerable<Domain> GetRealEstate()
{
return _repository.GetAll();
}
}
答案 0 :(得分:0)
感觉&amp;责任......这是一个让我看到更多人挣扎的困境。我觉得感觉更容易的关键是Domain
可以被认为是一个聚合根,它封装了它所有者的整个对象图。
让我们看一个比你想象的更接近的例子DbSet
。 DbSet
是一个存储库。但我认为我们大多数人认为编写像
context.Domain.Include(d => d.Companies)....
没有人会说DbSet<Domain>
与Company
有什么关系?即使我们向Domain
添加DbSet
,并且通过这样做我们添加了一个完整的对象图,任何人都不会感到有任何倾向于通过其正确的&#34;添加每个对象。 DbSet
。那将是一件完全无用的工作。
如果这不是一个好习惯,EF(或任何ORM)都不具备导航属性。想一想......噩梦。