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

asp.net-core asp.net-core-mvc c# entity-framework-core

質問

問題

私はasp.net 5コンソールサンプルアプリケーションを作成しています。私はバックエンドと対話するためにEntity Framework 7を使いたいと思っています。私はWebアプリケーションでこれを行う方法を知っていますが、 startup.csなくmain.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、Google、Bingを見てきましたが、EF7を使ってWebアプリケーション用のサンプルプロジェクトとコードを見つけました。コンソールアプリケーションでEF7について説明するドキュメントは見つかりませんでした。

私は上記のコードを書いていますが、私のmain.csにコンソールアプリケーション用に持っています。私は成功していない、明らかにmain.csの次のもの:

SampleConsoleDbContext scab = new SampleConsoleDbContext();

私は、私のプログラムに接続文字列が何であるかを伝える方法がなく、 main.csコンテキストをインスタンス化するために正しい方法でこれをmain.csています。

この面白い問題に関する援助、アドバイス、コメントを感謝します。ありがとうございました。

受け入れられた回答

heavydは大部分が必要ではなく、単にDIを設定するだけだと言っているので、コードをどのように読み取っているのかは間違っている可能性があります。

接続文字列の設定に関しては、簡単に行うことができます:

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

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);

コンテキストに接続文字列を渡します。

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


人気のある回答

Microsoftは実際にEntity Framework 7のドキュメントを作成し始めました。

サンプルから、OnConfiguringメソッドをオーバーライドするだけで、コンテキストのインライン設定を行うことができます:

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>");
    }
}

そして、Mainでコンテキストのインスタンスを作成するだけです。

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



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ