【问题标题】:Data reader incompatiable error when Entity Framework model generated from a database从数据库生成实体框架模型时数据读取器不兼容错误
【发布时间】:2013-08-30 14:57:17
【问题描述】:

向我的数据库添加新的存储过程并在 Visual Studio 2012 中更新我的实体框架模型后,我收到以下错误消息:

数据读取器与指定的“MyDb.usp_GetRolesForUser_Result”不兼容。类型的成员“RoleType”在数据读取器中没有同名的对应列。

我不明白这个问题是如何发生的,因为模型是从数据库/存储过程生成的。我尝试从模型中删除存储过程(存储过程、函数导入和复杂类型文件夹),然后从数据库中刷新。

注意:这是由类库使用的,当我使用 MVC Web 应用程序测试类库时收到错误消息。我已经确定我已经重建了这两个项目。

如果我从 select 语句中删除 r.RoleType,,刷新模型并重建项目,则不会出现错误。 RoleType 是 nvarchar(100),AppName 是 nvarchar(250)。

存储过程:

USE [MyDb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[usp_GetRolesForUser]
    @i_intId int = NULL
AS

SET NOCOUNT ON

BEGIN TRY

SELECT r.RoleId, r.RoleType, a.AppId, a.AppName
    FROM [USER] u INNER JOIN [USERROLE] ur on u.UserId = ur.FkUserId            
        INNER JOIN [ROLE] r on ur.FkRoleId = r.RoleId
        INNER JOIN [APPLICATION] a on r.FkAppId = a.AppId
    WHERE u.UserId = @i_intId
    ORDER BY a.AppName, r.RoleType

END TRY

BEGIN CATCH
   /*error catching*/
END CATCH

RETURN

生成的类:

public partial class usp_GetRolesForUser_Result
{
    public int RoleId { get; set; }
    public string RoleType { get; set; }
    public int AppId { get; set; }
    public string AppName { get; set; }
}

非常感谢您的帮助:)

【问题讨论】:

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


    【解决方案1】:

    所以这最终是一个简单的解决方案,就像您花费数小时试图诊断的问题一样!

    我最近更改了类库连接的数据库,但测试平台 Web 应用的连接字符串尚未更新。

    所以我和一位同事坐在那里,查看代码,我们俩都说没有错,事实证明我们是对的;错误代码在网络应用的 web.config 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2011-03-04
      • 1970-01-01
      • 2013-09-18
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多