此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查询结合起来?
答案 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支持