0

使用する必要があるストアド プロシージャが与えられたプロジェクトがあります。データベースに新しいレコードを作成するために使用されます。Int32テーブル内のレコードの新しい ID である を返します。また、エラーが保存され、2 番目の結果で送り返される一時テーブルもあります。したがって、基本的に最後の2行は

SELECT @NewID
SELECT * From @ErrorsTable

ストアド プロシージャを呼び出すには、Entity Framework を使用する必要があります。私の問題は、両方の戻り値を取得する方法がわかりません。

データベースから更新するときのデフォルトでは、Int32. ストアドプロシージャから複数の結果を返すいくつかの例を試してみましたが、すべての例が複数の複合型を返し、スカラー型と複合型が混在しているため、うまくいかないと思います。

4

1 に答える 1

0

したがって、このリンクhttp://msdn.microsoft.com/en-us/data/jj691402.aspxのコードコードのみのオプションにほとんど従うことで、最終的に解決したと思います

ストアド プロシージャと呼ばれる新しいメソッドをリポジトリに追加し、複数の結果セットを返しました。これらの線に沿った何か

Public Object[] StoredProcCall(string storedProc, SqlDbParams sqlParams, type[] types)
{
    var cmd = dbContext.Database.Connection.CreateCommand();
    cmd.CommandText = storedProc;
    cmd.CommandType = CommandType.StoredProcedure;
    if(parameters != null)
        cmd.Parameters.AddRange(sqlParams);
    var reader = cmd.ExecuteReader();

    try
    {
        dbContext.Database.Connection.Open();
        object[] mObj = new object[types.Count];
        for(int i = 0; i < types.Count; i++)
        {
            System.Reflection.MethodInfo method = typeof(AutoMapper.Mapper).GetMethod("DynamicMap", new Type[] { typeof(object)});
            var generic = method.MakeGenericMethod(types[i]);
            objected mappedData = generic.Invoke(this, new object[] { reader});
            mObj[i] = mappedData;
            if(!reader.NextResult())
                break;

        }
        return mObj;
    }
    finally
    {
        dbContext.Database.Connection.Close();
    }

}

唯一の考えは、それが機能するためには、単純な型である 1 つのプロパティのみで構成されるクラスを作成する必要があるということです。配列内のすべての型は IEnumerable である必要がありますが、これは私の場合は問題ありません。しかし、それは私がやったことの基本であり、必要に応じて変更できます。

于 2014-08-18T22:07:10.780 に答える