Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将值绑定到从存储过程返回的对象_C#_Entity Framework_Entity Framework 5 - Fatal编程技术网

C# 如何将值绑定到从存储过程返回的对象

C# 如何将值绑定到从存储过程返回的对象,c#,entity-framework,entity-framework-5,C#,Entity Framework,Entity Framework 5,我正在实体框架上使用SPs进行选择/插入操作。为此,我使用EF的函数导入功能在EF中定义SP。但我锁定了SP的返回类型 我想将SPs返回的值绑定到具有导航属性的实体,但找不到如何进行绑定 我的数据库是: Questions: -Id, -QuestionText Choices: -Id, -QuestionId, -Text 我的SP是: SELECT q.Id, q.QuestionText, c.Id as ChoiceId, c.[Text] as ChoiceText, FROM

我正在实体框架上使用SPs进行选择/插入操作。为此,我使用EF的函数导入功能在EF中定义SP。但我锁定了SP的返回类型

我想将SPs返回的值绑定到具有导航属性的实体,但找不到如何进行绑定

我的数据库是:

Questions:
-Id,
-QuestionText

Choices:
-Id,
-QuestionId,
-Text
我的SP是:

SELECT 
q.Id,
q.QuestionText,
c.Id as ChoiceId,
c.[Text] as ChoiceText,
FROM (SELECT TOP 1 * FROM Poll.Question q1 
WHERE q1.Id > @p_LastQuestionId
ORDER BY q1.Id DESC 
) q
LEFT JOIN Choice c ON q.Id = c.QuestionId
我现在得到的是:

Question
-Id
-QuestionText
-ChoiceId
-ChoiceText
我希望看到我的函数导入返回类型是一个带有集合属性的问题实体,集合属性具有相关选项:

Question
-Id (Int)
-QuestionText (String)
-List<Choices> Choices (Choice)

Choice
-Id (Int)
-Text (String)
问题
-Id(Int)
-问题文本(字符串)
-列出选项(选项)
选择
-Id(Int)
-文本(字符串)

但EF如何知道如何将SP结果拆分为多个实体?它只看到一个由四列组成的结果集。EF不检查SP代码以查看值的来源。您好,Gert,是的,我与您有相同的意见,我知道必须有一个用于列映射到实体的配置,是否有此配置?实体框架在使用linq查询时使用一个映射。我们是使用它还是配置一个新的?我听说一个名为EFExtensions的库正在做我需要的事情,但我想知道在使用此扩展之前是否有解决方案。问题是,为什么要使用SP进行读取操作?通常,读取操作通过上下文中的dbset完成,而CUD操作可以映射到SP。当然,您可以将跨越多个实体的“昂贵”读取操作委托给SP,但随后您必须自己处理扁平化的结果。我无法想象任何图书馆能为你做这件事。EFExtensions最后一次修改是在2010年:死胡同。