4

Я пытаюсь создать архитектуру Microservices. У меня есть служба без состояния в сочетании с Entity Framework, развернутой в Labur Service Cluster Fabric. Однако моя проблема в том, что когда у меня есть инициализатор с DropCreateDatabase, база данных удаляется, но не воссоздается.DropCreateDatabaseAllways с кодом Сначала не работает с Azure Sql Database

У меня есть следующий Initializer:

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.

Во-вторых, ткань кластера обслуживания не позволяет мне включать миграции для проекта. При включении миграции через консоль диспетчера пакетов я получаю следующую ошибку:

"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."

Как решить эту проблему. Я не хочу делать репликацию Entity Framework через Ado.net.

Редактировать

Я решить мою проблему, удалив инициализаторе и позволяет миграции. Решение для включения миграции находилось в целевой платформе в разделе «Свойства»> «Сборка». Переключение целевой платформы между x64 и x86, похоже, делает трюк. Функция seed в файле конфигурации также является своего рода инициализатором.

ответ

1

Вас вопросы состоит из двух вопросов:

  • базы данных инициализации и
  • Schema миграции

из которых я только решения первый, как это ваша главная задача. Эти две проблемы могут быть связаны так же, как и не могут.

Инициализатор DropCreateDatabaseAlways, безотзывно, отбрасывает базу данных при запуске приложения, но не сразу создает новый файл. Вместо этого он ожидает первого использования контекста в определенном домене приложения и только затем воссоздает его.

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

+0

Благодарим вас за ответ. Однако я решил свою проблему, разрешив миграцию и удалив инициализатор. – pmulders

+0

У меня такая же проблема. База данных не будет воссоздана. Я думаю, что это проблема отсутствия прав. Возможно, вы можете создать базу данных только через лазурный портал. Это делает первый опыт тестирования и обучения в разработке мобильных веб-приложений с azure несколько разочаровывающим и сложным ... – Inna

+0

Ну, добро пожаловать в постоянно меняющуюся среду Microsoft Stack. Вы, безусловно, можете создать db со всей схемой с Entity Framework непосредственно в Azure, это не должно быть проблемой. Я предлагаю задать отдельный вопрос. – matcheek

 Смежные вопросы

  • Нет связанных вопросов^_^