我有一个丰富的域,所以我想将域模型与持久性模型分开,这是所有Domain Driven Design从业者推荐的。 假设我有一个以下丰富的域模型:
public class Order
{
Public Guid Id {get; private set;}
Public Property1 {get; private set;}
Public Property2 {get; private set;}
private List<Item> Items;
Public AddItem() { }
....
}
这是我的数据传输对象(实体框架正在使用它):
public class OrderDTO
{
public Guid Id {get; set;}
Public Property1 {get; set;}
Public Property2 {get; set;}
...
}
实体框架DbContext:
public partial class EntityFrameworkContext : DbContext
{
...
public virtual DbSet<OrderDTO> Orders{ get; set; }
...
}
存储库:
public class OrderRepository : IOrderRepository
{
private EntityFrameworkContext _context;
....
public IQueryable<Order> FindBy(Expression<Func<Order, bool>> predicate)
{
//how to implement this ??
}
}
如何实现方法FindBy?我不能使用_context.Orders.where(谓词),因为权利框架上下文适用于OrderDTO而不适用于Order。我需要以某种方式在Func<Order, bool>
到Func<OrderDTO, bool>
之间建立映射。
任何帮助都会得到满足。
答案 0 :(得分:0)
如果使用OrderDTO构建谓词表达式
,该怎么办?public class OrderRepository : IOrderRepository
{
private EntityFrameworkContext _context;
....
public IQueryable<Order> FindBy(Expression<Func<OrderDTO, bool>> predicate)
{
return ConvertToDomainModel(_context.Orders.where(predicate);
}
}