2015-12-21 9 views
5

私はMVC 6プロジェクトを作成していますが、Entity Framework 7よりもClassic ADO.netを使用したいと思います。しかし、DataTableSqlDataAdapterの両方で名前空間が見つかりません。私はSystem.DataSystem.Data.SqlClientを使っています。私はプロジェクトをビルドしようとするまでエラーを表示しません。MVC 6の下でADO.NETを使用したDataTableの代替方法はありますか?

私はどこか2つの名前空間が新しいバージョンで実装されていないと読んでいると思います。もしそうなら、別のやり方があるのですか?依存関係がないかステートメントを使用していますか?

コード:

public static DataTable GetLog(string appName) 
{ 
    DataTable table = new DataTable("ApplicationLog"); 
    SqlDataAdapter da = null; 

    using (SqlConnection conn = DB.GetSqlConnection()) 
    { 
     SqlCommand cmd = new SqlCommand("select * from ApplicationLog where application_name = @appname", conn); 
     cmd.Parameters.Add(new SqlParameter("appname", System.Data.SqlDbType.NVarChar, 100)); 
     cmd.Parameters["appname"].Value = appName; 


     da = new SqlDataAdapter(cmd); 

     int res = da.Fill(table); 
    } 

    return table; 
} 

私project.json

{ 
    "userSecretsId": "aspnet5-ASPDemo-b25bb1cc-00e6-401e-9f49-5b59c08a030f", 
    "version": "1.0.0-*", 
    "compilationOptions": { 
     "emitEntryPoint": true 
    }, 

    "dependencies": { 
     "Bestro": "1.0.0-*", 
     "EntityFramework.Core": "7.0.0-rc1-final", 
     "EntityFramework.Commands": "7.0.0-rc1-final", 
     "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", 
     "Microsoft.ApplicationInsights.AspNet": "1.0.0-rc1", 
     "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final", 
     "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final", 
     "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final", 
     "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", 
     "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", 
     "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", 
     "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", 
     "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", 
     "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", 
     "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Logging": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", 
     "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", 
     "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final", 
     "DataTables.AspNet.AspNet5": "2.0.0-beta2" 
    }, 

    "commands": { 
     "web": "Microsoft.AspNet.Server.Kestrel", 
     "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
     "dnx451": { 
      "frameworkAssemblies": { 
       "System.configuration": "4.0.0.0", 
       "System.Data": "4.0.0.0" 
      } 
     } 
    }, 

    "exclude": [ 
     "wwwroot", 
     "node_modules" 
    ], 
    "publishExclude": [ 
     "**.user", 
     "**.vspscc" 
    ], 
    "scripts": { 
     "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ] 
    } 
} 

私はそれを遵守取得しようとするために、異なる成分を多くしようとしてしまいました。ご使用の参考資料がある場合はお知らせください。

答えて

4

System.Dataを参照してproject.jsondnxcore50を削除するには、私は上記のコードをコンパイルすることができます。新しいクエリ結果を保存するためのヌル可能なプロパティを持つ既存のエンティティの使用に関するすべてのクエリに対して新しいエンティティを作成することは良い考えではありません。さらに、私はJavaScriptで書かれたフロントエンドでの使用のためにJSON形式のデータを提供するためにWeb APIを使用するのが好きです。

エンティティフレームワークには、行SQLクエリを実行し、使用エンティティのないオブジェクトに結果を保存する方法が含まれています。私はthe answerのコードフラグメントを投稿しました。私はすぐにそのアイデアを思い出させる。

アプリケーションの構成ファイルに接続文字列を含める必要があります。たとえば、あなたがappsettings.json

{ 
    "Data": { 
    "MyDbConnectionString": "Server=(localdb)\\mssqllocaldb;Database=ApplicationDb;Trusted_Connection=True;MultipleActiveResultSets=true", 
    } 
} 

とを作成することができます次に、あなたが任意のエンティティずにダミーのコンテキストクラス

public class MyDbContext : DbContext 
{ 
} 

を作成します。 DbContextは、データベース接続を保持するためにのみ使用します。

次に、"appsettings.json"の内容に基づいてConfigurationプロパティを構成するStartup.csと記述します。

public class Startup 
{ 
    // property for holding configuration 
    public IConfigurationRoot Configuration { get; set; } 

    public Startup(IHostingEnvironment env) 
    { 
     // Set up configuration sources. 
     var builder = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json") 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", true) 
      .AddEnvironmentVariables(); 
     // save the configuration in Configuration property 
     Configuration = builder.Build(); 
    } 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddMvc() 
      .AddJsonOptions(options => { 
       options.SerializerSettings.ContractResolver = 
        new CamelCasePropertyNamesContractResolver(); 
      }); 
     services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<MyDbContext>(options => { 
       options.UseSqlServer(Configuration["Data:MyDbConnectionString"]); 
      }); 
    } 
    ... 
} 

今、あなたはMyDbContextが注入されていると1つのコンテキストでそれを使用することができますし、私は個人的に代わりDataTableList<dynamic>ExecuteReader/ExecuteReaderAsyncを使用することを好む

using (var cmd = MyDbContext.Database.GetDbConnection().CreateCommand()) { 
    cmd.CommandText = "select * from ApplicationLog where application_name = @appname"; 
    if (cmd.Connection.State != ConnectionState.Open) 
     cmd.Connection.Open(); 

    cmd.Parameters.Add(new SqlParameter("@appname", SqlDbType.NVarChar, 100) { 
     Value = appName 
    }); 

    da = new SqlDataAdapter(cmd); 

    int res = da.Fill(table); 
} 

を使用することができます(the answerからコードを参照してください)しかしそれほど重要ではない。

+0

ありがとう。これは正しい軌道に乗るだろう。しかし、options.UseSqlServer(Configuration ["Data:MyDbConnectionString"])のstartup.csファイルでエラーが発生しています。 DbContextOptionBuilder idはassymblyで定義されていますthatsは参照されていません。ありがとうございます。これは正しい軌道に乗るだろう。しかし、options.UseSqlServer(Configuration ["Data:MyDbConnectionString"])のstartup.csファイルでエラーが発生しています。それはassymblyで定義されているDbContextOptionBuilderのidはそれが参照されていないと言います – Dblock247

+1

@ Dblock247:あなたは大歓迎です! 'UseSqlServer'は' EntityFramework.MicrosoftSqlServer'で定義されています。 'Using Microsoft.Extensions.DependencyInjection;'と 'Using Microsoft.Extensions.Configuration;'が 'Startup.cs'に存在し、' project.json'がFF7に返される ''依存関係 ''を含んでいることを確認する必要があります。例:["EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"](https://www.nuget.org/packages/EntityFramework.MicrosoftSqlServer/7.0.0-rc1-final)および["EntityFramework。コマンド ":" 7.0.0-rc1-final "](https://www.nuget.org/packages/EntityFramework.Commands/7.0.0-rc1-final)。 – Oleg

+0

@ Dblock247:私は少し演奏したので、 'Startup.cs'に' Microsoft.Data.Entity;を使って 'を追加するべきだと思います。 – Oleg

2

project.jsonをお送りください。私は自分自身が私のC#コードで既存のストアドプロシージャと動的SQLクエリを使用したいので、私は、問題を理解

"frameworks": { 
    "dnx451": { 
     "frameworkAssemblies": { 
      "System.Data": "4.0.0.0" 
     } 
    } 
} 
+0

あなたの助けをありがとう – Dblock247

0

オレグの投稿は非常に役に立ちました。最新のリリースのように、DbContextには、組み込みDIを使用している場合はDbContextOptionsをとるコンストラクタが必要です。いくつかの味がありますが、空のDbContextクラスを "ダミー"にすることはできません。

https://docs.efproject.net/en/latest/miscellaneous/configuring-dbcontext.html

+0

あなたの答えを投稿してから参照してください。 – Sachith

関連する問題