私はC#ASP.NET MVC 5を学びたいと思っています。私はすべてのことに対してEntity Frameworkを使用しようとしています。モデルを使用せずにEntity Frameworkを使用して生のSQLクエリを実行する方法は?
しかし、生のSQLクエリを実行し、結果を配列に返す必要があります。
これまで私がこれまで行ってきたことは次のとおりです。
私はサーバーに接続できるコンテキストクラスを作成し、実行時にデータベースを変更することもできます。ここで
は、「私はこれが型引数メソッドのエラーがスローされます
BaseContext db1 = new BaseContext("server1"); var db1New = db1.setDatabase("someTableName"); string tableName = "SomeTableName"; var results = db1New.Database.SqlQuery("SELECT LOWER(column_name) AS column_name FROM information_schema.columns WHERE table_name = @tableName", tableName).ToArray();
何をすべきか、私のコンテキストクラス
using ScripterEngine.Models; using System; using System.Collections.Generic; using System.Data.Common; using System.Data.Entity; using System.Data.Entity.Core.EntityClient; using System.Data.SqlClient; using System.Linq; using System.Web; namespace ScripterEngine.DataAccessLayer { public class BaseContext : DbContext { protected string connectionName; public DbSet<Campaign> Campaign { get; set; } /** * Created the connection to the server using the giving connection string name * * @param connName */ public BaseContext(string connName = "BaseConnection") : base(connName) { connectionName = connName; } /** * Changes the default database * * @param databaseName */ public BaseContext setDatabase(string databaseName) { var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[connectionName].ConnectionString; SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString); //change the database before creating the new connection builder.InitialCatalog = databaseName; string sqlConnectionString = builder.ConnectionString; return new BaseContext(sqlConnectionString); } } }
そして、どのように、ここで接続を行うためにですSystem.Data.Entity.Database.SqlQuery(文字列、paramsオブジェクト[]) 'は使用法から推測できません。型引数を明示的に指定してみてください。 C:.NET Projects \ ScripterEngine \ ScripterEngine \ Controllers \ CampaignController.cs 42 27 ScripterEngine
この未処理クエリはどのように実行できますか?
ありがとうございます。今すぐ新しいエラーが発生する例外の詳細:System.Data.SqlClient.SqlException:スカラー変数 "@tableName"を宣言しなければならない 'var tableName =" SomeTableName ";' –
@MikeA '@ p0'を使用するようにtableName変数を宣言しました。クエリテキストの中で '@ tableName'ではなく' @ tableName'の代わりに使用します。 –
@IvanStoevありがとうございます。それはうまくいった。 '@ p0'はSqlQueryメソッドの最初のパラメータを表しますか? –