4

マイクロサービスアーキテクチャを作成しようとしています。 Azure Service Cluster FabricにデプロイされたEntity Frameworkと組み合わせたステートレスサービスがあります。 しかし、私の問題は、私はDropCreateDatabaseAlwaysでデータベースが削除されたが、再作成されていないInitializerを持っている場合です。次のコンテキストでDropCreateDatabaseAlwaysがAzure SQLデータベースで動作しないコードで初めて

class CompanyInitializer : DropCreateDatabaseAlways<CompanyContext> 
{ 
    protected override void Seed(CompanyContext context) 
    { 
     var companies = new List<Company> 
     { 
      new Company { Name = "AAA", City = "Eindhoven", Streetname="Street 12" }, 
      new Company { Name = "BBB", City = "Rotterdam", Streetname = "Street 12" }, 
      new Company { Name = "CCC", City = "Eindhoven", Streetname = "Street 12" } 
     }; 

     companies.ForEach(s => context.Companies.Add(s)); 
     context.SaveChanges(); 

     base.Seed(context); 
    } 
} 

public class CompanyContext : DbContext 
    { 
     public CompanyContext(string connectionString) : base(connectionString) 
     { 
      this.Database.Connection.ConnectionString = connectionString; 
      Database.SetInitializer<CompanyContext>(new CompanyInitializer()); 
     } 
     public DbSet<Company> Companies { get; set; } 
    } 

と私はステートレスサービスのコンストラクタを通じて、これらを接続しています:

public StatelessServiceCompany(StatelessServiceContext context) 
      : base(context) 
     { 
      _databaseConnectionstring = WebConfigurationManager.AppSettings["Entity.Framework.ConnectionString"]; 
      _context = new CompanyContext(_databaseConnectionstring); 

      new CompanyInitializer().InitializeDatabase(_context); 
     } 

そして

私は、次の初期化子を持っています接続ストリングは以下の通りです。

Data Source=*****.*****.****.***;Initial Catalog=******;Integrated Security=False;User ID=********;Password=********;Connect Timeout=30;Encrypt=True;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False 

問題は、データベースは破棄されますが再作成されないことです。私は、Azureプラットフォームでコードを使ってデータベースを作成する権利がないと考えています。

第2サービスクラスタファブリックでは、プロジェクトの移行を有効にできません。 Package Managerコンソールで移行を有効にすると、次のエラーが表示されます。

"System.BadImageFormatException: Could not load file or assembly 'StatelessServiceCompany' or one of its dependencies. An attempt was made to load a program with an incorrect format."

どうすればこの問題を解決できますか。私はAdo.netを介してEntity Frameworkの複製を作成したくありません。

編集

私は初期化子を削除し、移行を可能にすることによって、私の問題を解決しました。移行を有効にするソリューションは、Platform TargetのProperties> Buildの下にありました。 x64とx86の間でプラットフォームターゲットを切り替えることは、このトリックを行うように思えます。設定ファイル内のシード関数も一種の初期化子です。それはあなたの主な関心事であると私は最初のものに取り組むその

  • データベースの初期化と
  • スキーマの移行

答えて

1

あなたの質問には、二つの問題で構成されています。 これらの2つの問題が接続されている可能性があります。

初期化子DropCreateDatabaseAlwaysは、アプリケーションを実行するとデータベースを削除しますが、直ちに新しいデータベースを再作成しません。その代わりに、特定のアプリケーションドメインでの最初のコンテキスト使用を待ってから、それを再作成します。

https://msdn.microsoft.com/en-us/library/gg679506(v=vs.113).aspx

+0

ありがとうございました。しかし、私はマイグレーションを有効にし、イニシャライザを削除することで、私の問題を解決しました。 – pmulders

+0

私は同じ問題があります。データベースは再作成されません。私は権利がないという問題だと思う。おそらく、紺碧のポータルからデータベースを作成することしかできません。これは、いくつかのイライラして複雑な紺碧のモバイルWebアプリケーション開発の最初のテストと学習の経験を行います... – Inna

+0

Microsoft Stackの絶え間なく変化する環境へようこそ。 Entity FrameworkをAzureで直接スキーマ全体で作成することはできますが、それは問題ではありません。私は別の質問をすることをお勧めします。 – matcheek

関連する問題