此SPROC“返回”一个包含两列的表:Id、分数。
是否可以执行此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条答案
按热度按时间ajsxfq5m1#
在这里,您最好直接针对表编写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
ghhkc1vu2#
这是EF 4将带来实质性改进的领域之一,使用EF 4,您将能够拉入存储过程,并且如果该存储过程的返回值没有Map到给定的表,您可以轻松地创建一个所谓的复杂类型(基本上是一个类)来保存存储过程的返回值。
查看一些博客文章以获取示例和更多信息:
又一个值得期待的伟大新功能!
h5qlskok3#
在模型的Store部分中创建DefiningQuery,并使用与存储过程的结果相对应的属性。
您可以使用XML编辑器进行编辑。Devart Entity Developer具有对DefiningQueries的设计时支持。
然后为该过程创建一个函数导入,并将返回类型设置为手工实体。
Devart团队
http://www.devart.com/dotconnect
用于Oracle、MySQL、PostgreSQL、SQLite的ADO. NET数据提供程序,支持实体框架和LINQ to SQL