1

sqlQuery/Exec に問題があります。私のストアド プロシージャは、エンティティのリストを返します。しかし、パラメータリストを動的に追加する必要があります。

        using (MyContext db = new MyContext ()) 
        {
            var queryParam = new Dictionary<String, String>();
            var arg = String.Empty;
            var argList = new List<ObjectParameter>();
            var sql = String.Empty;

            foreach(var line in param.Split(','))
            {    
                var obj = line.Split(':');
                if (obj.Length < 2)
                {
                    continue;
                }

                if (obj[1].Equals(String.Empty))
                {
                    continue;
                }

                // arg = arg + "@" + obj[0] + "=" + "'" + obj[1] + "' ";
                argList.Add(new ObjectParameter(obj[0], obj[1]));
            }

            object[] prm = argList.ToArray();

            // Stored procedure ausführen und ergebniss erhalten.
            var list = db.Database.SqlQuery<Dokument>("EXEC dbo.spDokumente", prm).ToList();
            return AppServerHelper.AppResponse(list);
        }

実行時に、アプリケーションは、オブジェクト タイプが内部プロバイダーと一致しないことを返します。この問題を解決する手がかりがありません!

4

1 に答える 1

1

ObjectParameter の代わりに SqlParameter を使用してみてください。以下のサンプルコードに従います。

public List<MyCustomObject> SelectLoad(DateTime parameter1, DateTime parameter2)
{          
       return Execute("MyStoredProcedure @Parameter1, @Parameter2",
           new object[]{new SqlParameter("@Parameter1", parameter1),
           new SqlParameter("Parameter2",parameter2)});
}

private List<MyCustomObject> Execute(string query, object[] parameters)
{
    var output = new List<MyCustomObject>();
    using (var dbContext = new MyEntityFrameworkDataContext())
    {
    output = dbContext.Database.SqlQuery<MyCustomObject>(query, parameters).ToList();
    }
    return output;        
}

最初のメソッド内で、パラメーター オブジェクト配列を動的に作成できます。

于 2014-11-03T14:51:36.373 に答える