NHibernate相当于RIA中的LinqToEntitiesDomainService

时间:2010-05-28 14:31:30

标签: c# silverlight nhibernate linq-to-entities wcf-ria-services

当使用带有RIA域服务的Entity Framework时,域服务继承自LinqToEntitiesDomainService,我认为,它允许您在低级别(客户端)进行LINQ查询,这些查询会传播到ORM中;意味着所有查询都在数据库上执行,只有相关结果被检索到服务器,从而检索到客户端。

示例:

var query = context.GetCustomersQuery().Where(x => x.Age > 50);

现在我们有一个域服务,它继承自DomainService,并通过NHibernate会话检索数据,如下所示:

virtual public IQueryable<Customer> GetCustomers()
{
    return sessionManager.Session.Linq<Customer>();
}

这种方法的问题在于,如果不将整个表检索到服务器(或客户端)并在那里过滤它们,就无法进行特定查询。

有没有办法让LINQ查询在RIA上与NHibernate协同工作,就像它适用于EF一样?如果没有,我们愿意为此转而使用EF,因为性能影响太大了。

感谢。

1 个答案:

答案 0 :(得分:1)

你是否看过SQL分析器并查看了什么被查询?当您使用LINQ时,查询是在此方法中构建的,但实际执行在需要之前不会发生。

因为LINQ提供程序将IQuerable LINQ表达式树转换为标准,所以这很有效。如果您实际使用客户端上的LINQ或使用Silverlight数据源的等效项进行过滤,则仅返回请求的记录。该查询确实转换为数据库服务器上的适当WHERE子句。

换句话说,您检索所有记录,然后使用代码示例在服务器上进行过滤。客户端上的过滤器会一直转换到数据库服务器,并在那里进行过滤。