2015-10-28 10 views
5

問題EF7を使用し、ASP.NET 5 Beta 8コンソールアプリケーションのstartup.csなしでSQL Serverに接続する方法?

私はasp.net 5コンソールのサンプルアプリケーションを書いていますし、私は私のバックエンドに話をするEntity Frameworkの7を使用します。私はWebアプリケーションでこれを行う方法を知っていますが、startup.csではなくmain.csを使用しているときにコンソールアプリケーションでこれを達成する方法が失われています。

Webアプリケーションのコード

、あなたはstartup.csに次のコードを持っているでしょう。ここ

public void ConfigureServices(IServiceCollection services) 
{ 
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;"; 

    services.AddEntityFramework() 
      .AddSqlServer() 
      .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection)); 
} 

あなたはサービスがentityframework7とSQL Serverを使用している接続文字列のために設定されています。私はGitHubの、グーグル、ビングと上に見えただけEF7とWebアプリケーションのサンプルプロジェクトとコードを発見した

試み。コンソールアプリケーションでEF7について説明するドキュメントは見つかりませんでした。

私は上記のコードを書いていますが、私のコンソールアプリケーションのために私のmain.csに持っています。私は明らかにmain.csに以下で、成功を収めていない。

SampleConsoleDbContext scab = new SampleConsoleDbContext(); 

を、私は私のプログラムどのような接続文字列を伝える方法はありませんし、私はまだ疑問を持って、これは文脈がでインスタンスを取得するための正しい方法をそれmain.csも同様である。

この興味深い問題に関するお問い合わせ、アドバイス、コメントなどありがとうございます。ありがとうございました。

答えて

2

heavydと言われていますが、そのほとんどは必要ではなく、単にDIを設定するためのものであり、コードをどのように読んでいるかは間違っている可能性があります。あなたは、単純なDOの可能性、接続文字列を設定するよう

var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;"; 

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection); 

は、コンテキストへの接続文字列を渡します。

あなたは好きなだけこれを抽象化できますが、これは接続文字列をコンテキストのインスタンスに渡す方法です。

+0

これは私の特定のユースケースに答え、答えはそれが私が述べたEF7リンクで見つかったコードと一致与えられたように私はそれを投票しましたheavydに。私はあなたの時間と助けの両方のためにあなたを思う。それはまだ少し粗い場合でも、新しいef7のドキュメントを見つけることは本当にいいですね。 :) – hlyates

7

Microsoftは実際にあなただけのOnConfiguringメソッドをオーバーライドして、コンテキストインラインの設定を行うことができます彼らのサンプルから、Entity Frameworkのためのdocumentation 7.

を構築するために開始しました:

public class BloggingContext : DbContext 
{ 
    public DbSet<Blog> Blogs { get; set; } 
    public DbSet<Post> Posts { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder builder) 
    { 
     builder.UseSqlServer(@"<connection string>"); 
    } 
} 

そして、あなたができます

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var db = new BloggingContext()) 
     { 
      db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" }); 
      var count = db.SaveChanges(); 
      Console.WriteLine("{0} records saved to database", count); 

      Console.WriteLine(); 
      Console.WriteLine("All blogs in database:"); 
      foreach (var blog in db.Blogs) 
      { 
       Console.WriteLine(" - {0}", blog.Url); 
      } 
     } 
    } 
} 

ASP.NETの例では、の呼び出しでは、は、EFが残りのASP.NETと同じサービスプロバイダ(依存関係注入と考える)を使用できるようにすることです(これは、EFがASP.NETが使用しているものと同じロガーを取得することを意味します)。しかし、あなたがそのパターンに従わないことを望むなら、上記のアプローチを使うことができます。

+1

ご返信ありがとうございます。それは私が気づいていなかった新しいリンクです。私はあなたの返信をアップしました。私は昨夜この場所でも特定のコードを見つけました:https://github.com/aspnet/EntityFramework/wiki/Configuring-a-DbContext – hlyates

+0

UseSqlServerは利用できません。特定のアセンブリを追加する必要がありますか? –

+0

@Kris-I 'Microsoft.EntityFrameworkCore;を使用してパッケージ' Microsoft.EntityFrameworkCore.SqlServer' [こちらを参照](http://stackoverflow.com/a/39275251/94928)および[docs](https:// docs.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.sqlserverdbcontextoptionsextensions#Microsoft_EntityFrameworkCore_SqlServerDbContextOptionsExtensions_UseSqlServer_Microsoft_EntityFrameworkCore_DbContextOptionsBuilder_System_String_System_Action_Microsoft_EntityFrameworkCore_Infrastructure_SqlServerDbContextOptionsBuilder__) – heavyd

関連する問題