エンティティフレームワークコア使用Windowsサービス

c# entity-framework-core

質問

現在、データアクセスレイヤーにEF Coreを使用したマルチフィーチャーアプリケーションを構築する過程で、問題に取り組んでいるように感じ、100%確実ではありません。

基本的に私は自分のアプリケーションを次のコンポーネントに設計しています

  • 窓組立
  • asp.net mvc core web app
  • Windowsサービスx2
  • 単体テスト

私は可能な限り再利用できるように、私のアセンブリの中に多くのドメインを置いていますが、これが私が問題に取り組んでいるところです。私は現在、私のユニットテストアプリでEFを使用することができません。

私は現在、データベース接続文字列を設定するためにOnConfiguringをオーバーライドしていますが、ユニットtestIでコンテキストを使用しようとすると、次の例外メッセージが表示されます。 "インスタンスの失敗"

私の文脈はちょっと単純ですが、ただ一つの実体しかなく、次のように見えます:

public partial class CdiContext : DbContext
{
    private string ConnectionString { get; set; }
    private bool IsService { get; set; }
    public CdiContext(string connectionString, bool isService)
    {
        ConnectionString = connectionString;
        IsService = isService;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(ConnectionString);
    }

    public DbSet<Region> Regions { get; set; }
 }

単体テストを問題として除外するために、単純なコンソールアプリケーションも作成しましたが、同じ例外がスローされるので、どのように処理するかについては本当に迷っています。

 CdiContext context =  new CdiContext(@"Data Source=localhost\\SQLEXPRESS;Initial Catalog=herp-interface;Persist Security Info=True;User ID=sa;Password=herpaderp;Pooling=true", true);
 var regions = context.Regions.ToList();

 Console.ReadLine();

問題は、ASP.NET Core MVCアプリケーション以外のどのタイプのプロジェクトでも、WindowsアセンブリからEFコンテキストを使用できない場合、私はそれが間違っているのですか?

人気のある回答

このエラー - 「インスタンスの失敗」 - aspnetcoreアプリケーションから接続文字列をコピー/ペーストしても、 バックスラッシュをエスケープした場合に発生します

ASP.Net Coreの外、つまりコンソール/ Windowsサービスなどでは、app.config内の接続文字列はバックスラッシュをエスケープする必要はありません。

例えば

 <add name="DefaultConnection" connectionString="Server=localhost\\SQLEXPRESS...

むしろその後

 <add name="DefaultConnection" connectionString="Server=localhost\SQLEXPRESS...


Related

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