データベースに新しいストアド プロシージャを追加し、Visual Studio 2012 で Entity Framework モデルを更新すると、次のエラー メッセージが表示されます。
データ リーダーは、指定された '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; }
}
助けてくれて本当にありがとうございます :)