【问题标题】:Mapping Un-Named Stored Procedure columns映射未命名的存储过程列
【发布时间】:2015-08-28 14:47:47
【问题描述】:

我有一个存储过程:

ALTER PROCEDURE [dbo].[sp_MoodTester]
AS
BEGIN
    SELECT Id, 
           count(Id)  // Un-named, auto named to Column1 in entity model
    FROM Behaviors
    WHERE Id = 1
    GROUP by Id
END

当我像这样从应用程序调用这个存储过程时

var aa = context.sp_MoodTester().ToList();

我遇到了异常

数据读取器与指定的不兼容 'RelativityModel.sp_MoodTester_Result'。类型的成员, 'Column1',在数据读取器中没有对应的列 同名。

然后我尝试了另一种方式,比如

我创建了一个类似

的模型
public class ModelClass
{
    public int Id { get; set; }
    public Nullable<int> Column1 { get; set; }
}

并尝试过这种方式

var obj = context.Database.SqlQuery<ModelClass>("sp_MoodTester").ToList();

它返回一个对象,但有一个空列“Column1”,而从数据库返回的该列有一个值“1”。

我的问题是,由于我无法访问数据库来修改存储过程,我该如何获取这个值?

我仍然无法解决这个问题。

【问题讨论】:

  • 您应该更改您的程序并为列命名。另外,你可能想看看这个。 sqlperformance.com/2012/10/t-sql-queries/sp_prefix
  • 我在上面提到我无法更改存储过程,因为数据库不在我的访问范围内。上面的存储过程是一个示例存储过程。
  • 该列没有名称。我不知道除了找到编写该过程的假人并打他们没有给聚合列命名之外,您还能做很多事情。
  • 我不能为了打他而千里迢迢,即使保证他不会回复:)
  • 您能否给我们一张您将存储的过程映射到复杂类型的详细信息的屏幕截图?

标签: c# sql-server entity-framework stored-procedures


【解决方案1】:

给计数列命名:

ALTER PROCEDURE [dbo].[sp_MoodTester]
AS
BEGIN
    SELECT Id, 
           count(Id) as 'theCount'
    FROM Impacts
    where Id = 1
    GROUP by Id
END

【讨论】:

    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 2010-10-19
    • 2011-06-19
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多