我的代码正在对数据库进行两次往返,因为我不确定这是否是正确的方法来创建我的POCO的集合,因为某些特定的SQL代码,第一次往返到达存储过程。
用户在UI中输入一些 AutoComplete 搜索查询。我的代码命中存储过程(利用F * ull文本搜索* - 因此我使用存储过程的原因)并返回结果的所有distinct primary keys
。这些返回到代码(我的IRepository class
),然后我使用EF来检索这些存储过程结果的所有结果。
首先,我不知道如何在Linq to Entities
中执行此操作:对于Id的集合,检索所有Foo实体。
其次,我正在两次往返数据库。为什么?因为我不确定如何在第一次往返中找回丰富的结果。该实体由几个POCO
类组成,还有两个ICollection
属性等等......
这是我应该使用存储过程然后检索丰富的已填充实体的正确方法。
我会快速创建一个虚拟类图来帮助解决任何问题。
public class Person
{
string Name;
int Age;
ICollection<string> NickNames;
ICollection<Foo> DonnoSomethingElses;
}
思想?
答案 0 :(得分:1)
嗯,这两次往返听起来像一个可以避免的问题 - 你不能做类似的事情:
WITH FullTextResults AS
(
SELECT ID, ...... --- do your full text search here
)
SELECT
(list of fields)
FROM
dbo.YourDataTable t
INNER JOIN
FullTextResults ftr ON t.ID = ftr.ID -- join on primary key
WHERE
..... -- possibly limit results
并从存储过程中返回此CTE(公用表表达式)的输出?那将返回一个包含实际数据表中行和列的数据集,EF可以实现您的Person
类......