0

データベースに新しいストアド プロシージャを追加し、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; }
}

助けてくれて本当にありがとうございます :)

4

1 に答える 1