4

.Netコアコンソールアプリケーション(EFコア2.0/Sqlサーバー)の次のコード。.NETコアアプリケーションのSQL文からスカラー値を取得する方法は?

var sql = _context.Set<string>() 
      .FromSql("select dbo.FunctionReturnVarchar({0});", id); 

は次の例外がありますか?

この型はコンテキストのモデルには含まれていないため、 'string'のDbSetを作成できません。

文字列のプロパティを持つクラスを定義しない方法ですか?

+2

https://github.com/aspnet/EntityFrameworkCore/issues/1862現在、モデル内のエンティティタイプの1つと異なるシェイプを返すFromSqlは使用できません。 – Smit

答えて

5

.Set<TEntity>()は、コンテキストに基づいたエンティティ用です。

あなたは、このシナリオに必要なもの

DbCommand cmd = _context.Database.GetDbConnection().CreateCommand(); 

cmd.CommandText = "select dbo.FunctionReturnVarchar(@id)";  

cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.VarChar) { Value = id }); 

var value = (string) await cmd.ExecuteScalarAsync(); 
+3

非ジェネリックメソッド '.Set()'は 'CS0411 \t 'のコンパイルエラーを取得します。' DbContextの型引数。を設定10() 'はその使用から推測できません。型引数を明示的に指定してみてください。私は非常に面倒なraw ado.netアプローチを試みます。 – ca9163d9

+0

@ dc7a9163d9私の最初の提案はもう適用されません。更新されます。 – Nkosi

4

がバインドされた出力パラメータを持つExecuteSqlCommand方法で回避策を試すことができます。

var resultParameter = new SqlParameter("@result", SqlDbType.VarChar); 
resultParameter.Size = 2000; // some meaningfull value 
resultParameter.Direction = ParameterDirection.Output; 
_context.Database.ExecuteSqlCommand("set @result = FunctionReturnVarchar({0});", id, resultParameter); 
var result = resultParameter.Value as string; 
+2

4行目のパラメータ 'result'は' resultParameter'ですか? – ca9163d9

+0

もちろん、ありがとう。 –

関連する問題