使用 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/