2013-08-30 68 views
0

添加新的存储过程,我的数据库,并在Visual Studio 2012来更新我的实体Frameowork模型后,我收到以下错误信息:数据读取器incompatiable错误

数据读取器与指定的'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; } 
} 

您的帮助:)感谢

回答

0

因此,它是在最后一个简单的解决方案,正如以往的您花费数小时尝试诊断的问题!

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

所以我和一位同事一起坐在那里看着密码,我们俩都在说没有错,结果证明我们是对的。错误的代码在web应用程序的web.config中。