代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

建议使用实体框架4的存储过程吗?

  •  1
  • Pure.Krome  · 技术社区  · 14 年前

    我的代码正在对数据库执行两次往返操作,因为我不确定这是否是创建POCO集合的正确方法,因为某些特定的SQL代码,第一次往返操作会在POCO集合中命中存储过程。

    脚本

    用户输入一些 自动完成 在UI中搜索查询。我的代码命中一个存储过程(它利用了F*ull-Text搜索*—这就是我使用存储过程的原因)并返回所有 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 回复  |  直到 14 年前
        1
  •  1
  •   marc_s Anurag    14 年前

    嗯,这两次往返听起来像是一个可以避免的问题-难道你不能做点什么吗:

    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 从那开始上课。。。。。