实体框架映射到域对象

时间:2017-07-16 13:26:29

标签: c# entity-framework domain-driven-design repository-pattern

我有一个丰富的域,所以我想将域模型与持久性模型分开,这是所有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>之间建立映射。

任何帮助都会得到满足。

1 个答案:

答案 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);
    }
}
相关问题