我正在使用.net与实体框架数据库首先批准。我想知道存储过程是否可以将结果作为表集而不是过程结果集返回。
假设我有一张桌子:
table MyTable(
id int,
value nvarchar(max))
存储过程:
procedure GetMyTableSet
AS
Select *
From MyTable A
Where A.Value = 'test'
现在,过程在.net中返回的类型将是GetMyTableSet_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);
}
我想知道它是否可能像ObjectResult<MyTable>
而不是ObjectResult<GetMyTableSet_Result>
,因为该过程会返回与MyTable表相同的数据结构。
答案 0 :(得分:0)
您正在返回一个实体,该实体可以存储在您喜欢的任何名称的对象中。您还可以使用VIEW
而不是存储过程。
在代码术语中并使用EF上下文:
MyEntity dbEntity = new MyEntity();
var MyTable = dbEntity.GetMyTableSet;
EF将执行数据类型的映射,以便返回的对象将镜像存储过程返回的类型(除非您使用CAST
或CONVERT
更改列类型。
答案 1 :(得分:0)
您可以查看here以了解如何从Entity Framework调用过程。 EF将根据列名执行结果集列值和属性之间的所有映射,但您必须注意数据类型兼容性。
另外,我认为你可以通过指定一些属性should not be mapped来控制映射。