c# - 在使用 ViewModel 或 DTO 而不是 ORM 生成的实体时,如何保留 IQueryable<T> 的优点?

标签 c# .net design-patterns orm

使用 Linq-To-SQL 或 Entity Framework 时,DataContext 和生成的实体提供 IQueryable 接口(interface)以实现延迟执行。它让我可以编写这样的代码:

public class RPO
{
    DataContext dc;
    public RPO(){ dc = new DataContext(); }
    public IQueryable<Data> ReadData()
    {
        return dc.Data;
    }
}

public class Svc
{
    RPO repository;
    public Svc() { repository = new RPO(): }
    public IQueryable<Data> ReadActiveData() 
    { 
        return repository.ReadData().Where(d => d.IsActive.Equals(true)); 
    }
    public IQueryable<Data> ReadArchiveData() 
    { 
        return repository.ReadData().Where(d => d.IsArchived.Equals(true)); 
    }
}

如果在类 Svc 中,此模型就会崩溃。我回来DataModel而不是Data -- 我怎样才能保留IQueryable<T>尽可能远离链条?

最佳答案

您的 SVC 层不应公开 IQueryable。然后发生的情况是,实际上是您的服务使用者执行您的查询,这是一个不好的模式。所以服务应该始终公开 足以供服务用户使用(显示)的数据。

最好是 IList 或 IEnumarable。

关于c# - 在使用 ViewModel 或 DTO 而不是 ORM 生成的实体时,如何保留 IQueryable<T> 的优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6510317/

相关文章:

c# - HttpPost 和 HttpPut 之间的 MVC Web Api 区别

.net - Databound后如何更改Gridview的标题文本?

.net - .net 中是否有表示 “range” 的标准类?

java - "Facade design pattern"和 Java 接口(interface)在概念上是否相同?

java - 外观和 DAO 之间适合什么模式?

swift - 为什么 swift 同时提供 CGRect 初始化器和 CGRectMake 函数?

c# - 通过电子邮件发送日志文件?统一

c# - 使用测试驱动开发时俄罗斯方 block 的验收测试

c# - 在运行 XNA 游戏时在 visual studio 中观看控制台输出面板

.net - 请学习F#的一些好资源