C# 将存储过程数据作为表集返回
我首先使用.net和实体框架数据库。我想知道存储过程是否可以将结果作为表集而不是过程结果集返回 假设我有一张桌子: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,因
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代码显示问题吗?我编辑了我的帖子,希望现在更清楚。但是我越想它,我就越觉得我在要求一些不可能/不正确的东西。