Eoi*_*ell 7 c# linq domain-driven-design entity-framework object-object-mapping
我一直在阅读Tim McCarthy 关于.NET中DDD的精彩书籍.但是在他的示例应用程序中,他的基础数据访问是使用SqlCE并且他手工编写SQL内联.
我一直在使用一些模式来利用Entity Framework,但我已经陷入了如何将IRepository linq查询映射到底层数据访问层的问题.
我有一个名为的具体存储库实现.
public EFCustomerRepository : IRepository<DomainEntities.Customer>
{
IEnumerable<DomainEntities.Customer> GetAll(
Expression<Func<DomainEntities.Customer, bool>> predicate)
{
//Code to access the EF Datacontext goes here...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的EF模型中,我正在使用POCO实体,但即便如此,我的DomainEntity.Customer和我的DataAccessLayer.Customer对象之间也没有原生映射.
所以我不能只Expression<Func<DomainEntities.Customer, bool>> predicate
作为参数传递给EFContext.Customers.Where(...);
是否有一种简单的方法来映射
Expression<Func<T, bool>> predicate
=>Expression<Func<TOTHER, bool>> predicate
或者我这样做是错的?任何建议/指针赞赏.
从您的示例中提供的代码来看,我猜您没有使用通用存储库模式?
我使用 EF CodeFirst (但它适用于旧的 EF)和通用存储库模式... http://average-uffe.blogspot.com/2011/03/repository-pattern-with-ef-code-first.html
我在那篇文章中没有Expression<Func<DomainEntities.Customer, bool>>
,但我总是在界面中有一个 Find 方法IRepository<T>
。
界面:
IEnumerable<T> Find(Expression<Func<T, bool>> expression, int maxHits = 100);
Run Code Online (Sandbox Code Playgroud)
以及抽象baserepository中的实现:
public virtual IEnumerable<T> Find(Expression<Func<T, bool>> expression, int maxHits = 100) {
return this.DataContext.DbSet<T>().Where(expression).Take(maxHits);
}
Run Code Online (Sandbox Code Playgroud)
现在您可以通过 lambda 表达式在任何实体上调用 Find...
如果您不明白,我可以发布一个完整的示例,只需说明时间即可。
归档时间: |
|
查看次数: |
375 次 |
最近记录: |