【问题标题】:Stored procedure search using entity framework使用实体框架的存储过程搜索
【发布时间】:2009-10-08 01:07:25
【问题描述】:

我想实现一个我见过并使用过的搜索逻辑。它的工作原理是这样的:

在实体框架中加载了一个存储过程,它在C#中用作方法,它需要参数来执行搜索。该方法返回视图列表(数据库视图)。列表中的视图只有一些需要在网格中显示的属性。例如,我正在通过一些参数搜索用户,结果是用户列表。我没有返回用户对象列表,而是使用了一个 vUser 视图,该视图仅包含将在网格上列出的属性。例如 ID、姓名和姓氏。但是数据仍然是正确的,因为存储过程搜索是针对数据库中的表用户进行的。

View 也作为 C# 对象加载到实体框架中。 我使用的是 SQL Server 2005。

我该如何实现呢?

非常感谢。

【问题讨论】:

    标签: sql entity-framework search stored-procedures view


    【解决方案1】:

    是的,您可以这样做。

    不幸的是,在 EF 3.5 中,您需要创建一个 EntityType(仅包含您在存储过程中投影的列),以便您可以创建一个公开存储过程结果的 FunctionImport

    所以步骤:

    1. 确保在创建模型时(或从数据库刷新模型时)包含存储过程

    2. 创建一个与存储过程返回的形状完全匹配的EntityType

    3. 使用该存储过程创建一个 FunctionImport,并说它返回您在 (2) 中创建的 EntityType

    在 EF 4.0 中,您可以跳过步骤 (2),因为 EF 工具会自动执行此过程。

    查看此post from Julie 了解更多背景信息

    希望对你有帮助

    亚历克斯

    【讨论】:

    • 该函数会返回什么?这将是一个具有与我在存储过程的 SQL 代码中选择的相同属性的视图列表吗?
    • 好吧,如果你说的视图列表是指视图中的行列表,那么是的。
    • 嗨,我已经按照以下步骤完成了所有操作:加载存储过程并查看 edmx 文件和模型浏览器中的文件夹函数导入,右键单击添加函数导入并选择存储过程给它命名并选择返回类型的实体之间的视图。当我尝试进行搜索时,我收到 EntityCommandExecutionException 异常,并显示“数据读取器与指定的‘vUser’不兼容。类型的成员‘名称’在数据读取器中没有具有相同名称的对应列。” “名称”在函数参数列表中的位置与在 SPROC 中的位置相同。
    • 您的实体类型需要具有与阅读器相同的命名属性。即,如果您有 Entity{ID,Name,Surname} 那么当您直接调用存储过程时,生成的阅读器应该在第 0 列中具有 ID,在第 1 列中具有名称,在第 2 列中具有姓氏等。这与匹配参数无关(即传递给 Sproc 的东西)。
    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2014-01-25
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多