Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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#_Sql_.net_Sql Server_Entity Framework - Fatal编程技术网

C# 将存储过程数据作为表集返回

C# 将存储过程数据作为表集返回,c#,sql,.net,sql-server,entity-framework,C#,Sql,.net,Sql Server,Entity Framework,我首先使用.net和实体框架数据库。我想知道存储过程是否可以将结果作为表集而不是过程结果集返回 假设我有一张桌子: table MyTable( id int, value nvarchar(max)) 和存储过程: procedure GetMyTableSet AS Select * From MyTable A Where A.Value = 'test' 现在,该过程在.net中返回的类型将是GetMyTableSet\u Result,但它是否可能是MyTable,因

我首先使用.net和实体框架数据库。我想知道存储过程是否可以将结果作为表集而不是过程结果集返回

假设我有一张桌子:

table MyTable(
id int, 
value nvarchar(max))
和存储过程:

procedure GetMyTableSet
AS
  Select *
  From MyTable A
  Where A.Value = 'test'
现在,该过程在.net中返回的类型将是
GetMyTableSet\u Result
,但它是否可能是
MyTable
,因为它具有相同的数据结构?我可以在程序中使用它或做其他事情吗

编辑:在.net中,我的过程是这样生成的:

public virtual ObjectResult<GetMyTableSet_Result> GetMyTableSet(string accessRight, Nullable<int> companyId, string accessParam, Nullable<bool> multipleCompanies)
        {
            var accessRightParameter = accessRight != null ?
                new ObjectParameter("accessRight", accessRight) :
                new ObjectParameter("accessRight", typeof(string));

            var companyIdParameter = companyId.HasValue ?
                new ObjectParameter("companyId", companyId) :
                new ObjectParameter("companyId", typeof(int));

            var accessParamParameter = accessParam != null ?
                new ObjectParameter("accessParam", accessParam) :
                new ObjectParameter("accessParam", typeof(string));

            var multipleCompaniesParameter = multipleCompanies.HasValue ?
                new ObjectParameter("multipleCompanies", multipleCompanies) :
                new ObjectParameter("multipleCompanies", typeof(bool));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GetMyTableSet_Result>("GetMyTableSet", accessRightParameter, companyIdParameter, accessParamParameter, multipleCompaniesParameter);
        }
public virtual ObjectResult GetMyTableSet(字符串accessRight、可空公司ID、字符串accessParam、可空多公司)
{
var accessRightParameter=accessRight!=null?
新的ObjectParameter(“accessRight”,accessRight):
新的ObjectParameter(“accessRight”,typeof(string));
var companyIdParameter=companyId.HasValue?
新对象参数(“companyId”,companyId):
新的ObjectParameter(“companyId”,typeof(int));
var accessParamParamParamParameter=accessParam!=null?
新对象参数(“accessParam”,accessParam):
新的ObjectParameter(“accessParam”,typeof(string));
var multipleCompaniesParameter=multipleCompanies.HasValue?
新的ObjectParameter(“multipleCompanies”,multipleCompanies):
新的ObjectParameter(“multipleCompanies”,typeof(bool));
返回((IObjectContextAdapter)this.ObjectContext.ExecuteFunction(“GetMyTableSet”、accessRightParameter、companyIdParameter、AccessParameter、multipleCompaniesParameter”);
}

我想知道的是,当过程返回与MyTable表相同的数据结构时,它是否可能类似于
ObjectResult
,而不是
ObjectResult

您返回的是一个实体,它可以存储在具有任意名称的对象中。您还可以使用
视图
而不是存储过程

在代码术语和EF上下文中:

MyEntity dbEntity = new MyEntity();
var MyTable = dbEntity.GetMyTableSet;
EF将进行数据类型的映射,因此返回的对象将镜像存储过程返回的类型(除非您使用
CAST
CONVERT
更改列类型。

您可以了解如何从实体框架调用过程。EF将根据列名执行结果集列值和属性之间的所有映射,但您必须注意数据类型兼容性


另外,我认为您可以通过指定某些属性来控制映射。

我给出的示例只是为了说明我需要做什么,即使用存储过程。实际过程更复杂,我不能在那里使用视图。我不是在谈论实体名称,而是类型。我希望我说得清楚。@John我已经修改了回答,我不清楚你的实际问题是什么。你有样本C#,EF代码显示问题吗?我编辑了我的帖子,希望现在更清楚。但是我越想它,我就越觉得我在要求一些不可能/不正确的东西。