这是使用存储过程与实体框架4的推荐方法吗?

时间:2010-11-15 12:05:52

标签: .net sql-server entity-framework stored-procedures entity-framework-4

我的代码正在对数据库进行两次往返,因为我不确定这是否是正确的方法来创建我的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;
}

思想?

1 个答案:

答案 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类......