有什么办法可以执行这个SPROC并使用Entity Framework获得结果吗?

时间:2009-12-30 11:56:24

标签: sql-server linq linq-to-sql entity-framework sql-server-2008

此SPROC“返回”一个包含两列的表:Id,Score。

是否可以执行此SPROC并将自定义数据类型作为参数包含在实体框架中?

ALTER PROCEDURE [presenta].[SearchLpi] 
    // The presenta.IdTableType is a table with just one column "Id"
    @selectedLpis presenta.IdTableType READONLY
AS
BEGIN
    SET NOCOUNT ON;

    WITH Scores AS(
        SELECT
            ItemId, SUM(Score) AS Score

        FROM [Presenta].[presenta].[LpivScores]

        WHERE
            ListPropertyItemId IN (
                SELECT Id
                FROM @selectedLpis
            )

        GROUP BY
            ItemId
    )
    SELECT
        i.Id,
        s.Score
    FROM
        Scores  s,
        Items   i
    WHERE
        s.ItemId = i.Id

END

如果没有,是否有其他方法可以获得SPROC的结果并能够将此结果与另一个LINQ查询结合起来?

3 个答案:

答案 0 :(得分:1)

在这里,您最好直接针对表编写EF linq查询。有关示例,请参阅http://msdn.microsoft.com/en-us/library/bb896341.aspx

如果必须使用存储过程,则可以使用表作为返回类型。您需要使用返回的字段创建临时表。请参阅:http://blogs.msdn.com/bindeshv/archive/2008/11/20/using-stored-procedures-in-entity-framework.aspx

答案 1 :(得分:1)

这是EF 4将带来实质性改进的领域之一。使用EF4,您将能够引入存储过程,如果该sproc的返回值未映射到给定表,您可以轻松创建一个所谓的复杂类型(基本上是一个类)存储的proc返回值。

有关示例的详细信息,请参阅一些博客文章:

另一个值得期待的新功能!

答案 2 :(得分:0)

在模型的Store部分中创建DefiningQuery,其属性对应于存储过程的结果。
您可以使用您喜欢的XML编辑器来创建它。 Devart Entity Developer为DefiningQueries提供设计时支持 然后为该过程创建一个函数导入,并将返回类型设置为手工制作的实体。
Devart Team
http://www.devart.com/dotconnect
ADO.NET数据提供程序适用于Oracle,MySQL,PostgreSQL,SQLite等 实体框架和LINQ to SQL支持