0

在向我的数据库添加新的存储过程并在 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; }
}

非常感谢您的帮助 :)

4

1 回答 1

0

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

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

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

于 2013-09-02T09:32:19.913 回答