EF6无法调用存储过程并返回复杂类型

时间:2014-07-27 16:14:53

标签: asp.net linq entity-framework

我正在为每个实体创建包含所有数据库访问函数的类(GetByIdInsertUpdateDelete,{{ 1}})。

对于我的GetList函数,我总是使用存储过程,因为它们可能变得非常复杂(我更喜欢基于Linq的TSQL)。我无法返回正确的类型。我希望一个对象列表能够在我的代码中使用以填充网格等。

有人可以查看我的代码并告诉我哪里出错了吗?

GetList

我收到错误:

  

无法将类型'System.Data.Entity.Core.Objects.ObjectResult'隐式转换为'DAL.Customers_GetList_Result'

3 个答案:

答案 0 :(得分:2)

嗯,我想我想出了我想要的东西:

public IEnumerable<Customers_GetList_Result> GetList(string CustomerName) {
   using (var db = new DataEntities()) {
       return db.Customers_GetList(CustomerName);
   }
}

我忘了将IEnumerable添加到我的函数声明中。抱歉,从VB.net到C#。

答案 1 :(得分:0)

生成的存储过程返回ObjectResult<T>

ObjectResult<T>是一个集合。如果要返回T类型的单个元素,则需要执行以下操作。

public Customers_GetList_Result GetList(string CustomerName) {
    using (var db = new DataEntities()) {
        return db.Customers_GetList(CustomerName).Single();
    }
}

答案 2 :(得分:0)

当调用映射到存储过程的函数时,我得到了同样的错误,我希望返回一个复杂的数据类型。我在选择单个记录时才得到它,上面的建议有所帮助。原始代码是:

        using (ede = new EDEntities())
        {
            var item = ede.SelectMatrixItem(itemCode);
            return item;
        }

当我将其更改为:

using (ede = new EDEntities())
            {

                var item = ede.SelectMatrixItem(itemCode).FirstOrDefault();
                return item;
            }

然后错误就消失了。我的问题是FirstOrDefault或SingleOrDefault是否是更好的选择。 ItemCode是主键。

乔伊