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

时间:2015-12-29 10:28:04

标签: 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_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表相同的数据结构。

2 个答案:

答案 0 :(得分:0)

您正在返回一个实体,该实体可以存储在您喜欢的任何名称的对象中。您还可以使用VIEW而不是存储过程。

在代码术语中并使用EF上下文:

MyEntity dbEntity = new MyEntity();
var MyTable = dbEntity.GetMyTableSet;

EF将执行数据类型的映射,以便返回的对象将镜像存储过程返回的类型(除非您使用CASTCONVERT更改列类型。

答案 1 :(得分:0)

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

另外,我认为你可以通过指定一些属性should not be mapped来控制映射。