2016-12-25 19 views
1

私のアプリはハンドラクラスのインスタンスにシングルトンパターンを使用します。シングルトンインスタンスでDBを更新するには?

多分、MyHandlerはDBとの対話を開始する必要があります。だから私はそれをすることができますか?ただ、厳しい

  1. MyHandlerでシングルトンとしてDbContextを添付:私のビジョンがあります。明らかにそれは悪い考えです。
  2. 使用ASP.NetコアDIが特徴とMyHandlerDbContextを送るが、例えば「1つの要求につき1つの」など。私は、これは1
  3. usingオペレータを通してそれを実行し、すなわち、アトミックトランザクションとして、例えばのために類似している(MyHandlerがシングルトンである)私の場合で考えますusing(var context = new XDbContext()) {...}は私のためとして、それは良い方法だが、Entity Frameworkのコア実装のDbContextは、コンストラクタの引数としてDbContextOptionsを必要とします。 XDbContextのためのパラメータのないコンストラクタを宣言すると、例外がスローされます。

+0

:私は、チュートリアルで使用するの

using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; namespace MyProject { public class BloggingContextFactory : IDbContextFactory<BloggingContext> { public BloggingContext Create() { var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>(); optionsBuilder.UseSqlite("Filename=./blog.db"); return new BloggingContext(optionsBuilder.Options); } } } 

例を工場出荷時の例を発見しましたか?例えば同じように、あなたの 'MyHandler'クラスで' DbContext'特性を持っており、それには、彼らはGCを介して収集することがありますので、あなたが以前のインスタンスを心配する必要はありませんXDbContext' 'のインスタンスを更新し得るのです。私の場合は – Emad

+0

@Emadは 'HandlerEvent'は紺碧サービスバスから到着するメッセージ、すなわち、それはEgorikasの答えは工場出荷時のパターンを使用して同じことをするのに私のポイントがまだ有効である – Mergasov

+0

のhttp-の要求に依存しない処理を行います。私のDbContextプロパティのgetメソッドで、ファクトリのコード全体を作成させることができます。 – Emad

答えて

1

私はef coreチュートリアル(https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext)を見てきましたが、私が理解したように、DbContextOptionsはその内部に構成パラメータを持つオブジェクトに過ぎません。同じ問題があった場合は、3番目の方法を使用しますが、パラメータを注入するためのヘルパーを作成するか、またはファクトリを使用してこれを作成します。あなたはすべてのリクエストでインスタンスを更新しないのはなぜ

public class MyHandler 
{ 
    public void HandlerEvent(object sender, EventArgs e) 
    { 
     // Or make 'Create' method static 
     using(var context = new BloggingContextFactory().Create()) 
     { 
       . . . 
     } 
    } 
} 
+0

このようなアプローチは、OnModelCreatingメソッドで実装された主なDB構成を損なう可能性がありますか?または、このコンストラクタはOnModelCreating-configsのためのものではありませんか? – Mergasov

+0

@Mergasov私が知っているように、新しいEFコアはASP.NETコアのように書かれています。これは私たちがweb.configファイルを持っているし、別のファイル(例えばappsettings.json)で私たちのプロパティを格納していないことを意味し、私はこのアプローチは、メインDB-構成を弱体化させることができたとしますが、私はよく分かりません。 https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-stringsとASP.NET Coreセクションをご覧ください – Egorikas

関連する問題