Контекст Entity Framework и Microsoft Azure. Как обновить базу данных?

У меня есть решение ASP.NET MVC 5 с примерно 4 проектами внутри. + EF code-first После прочтения этой статьи Я попытался отделить контекст приложения EF (идентификатор asp.net) от моего контекста моделей (оба контекста в одной базе данных)

Теперь у меня есть 2 проекта с разными контекстами.

//main project
public class ApplicationDbContext : IdentityDbContext<applicationuser>
{
 public ApplicationDbContext()
 : base("MyDB")
 {
 }
}
//another project
public class DALDbContext : DbContext
{
 public DALDbContext()
 : base("MyDB")
 {
 }
 ...
}
</applicationuser>

Я могу обновить базу данных следующим образом:

update-database -ProjectName: myProject.WEB

update-database -ProjectName: myProject.DAL

(в сети у меня есть идентификатор asp.net)

Если я опубликую это решение из VisualStudio в Azure, я могу проверить "Выполнять первые шаги кода (запускается при запуске приложения)".

Но если я понимаю правильно, это будет эквивалентно только одной команде:

update-database -ProjectName: myProject.WEB

потому что это проект по умолчанию.

Я не понимаю, как запустить обе команды. Другая сторона, я попытался выполнить обе команды отдельно. Я написал что-то подобное в "Консоль диспетчера пакетов":

Update-Database -ConnectionString "Server=tcp:<server_name>.database.windows.net,1433;Database=<database_name>;User ID=<db_user_name>@<server_name>;Password=<password>;Trusted_Connection=False;Encrypt=True;MultipleActiveResultSets=True;Max Pool Size=100;" -ConnectionProviderName "System.Data.SqlClient"
</password></server_name></db_user_name></database_name></server_name>

но я получаю ошибку: "Свойство ConnectionString не было инициализировано".

Или может быть попытка запустить один метод семени из другого... (но я думаю, что он сильно отличается)

В конце - 2 вопроса:

  • Можно ли отличить один контекст от другого?
  • Как запустить эти методы семян на лазури? (или ваш вариант)
1 ответ

Я сам решу проблему.

Что я сделал:

Получить фактическую строку соединения с лазурного сайта.  Это что-то вроде этого:

Data Source=tcp:"<address><code>.database.windows.net,1433;
Initial Catalog=MyDB;
User Id=<login>@</login></code><address><code>;Password=<password>;
</password></code>
</address></address>

Также я добавляю "persist security info = True;" (может быть, это не обязательно) поэтому мы имеем

Data Source=tcp:"<address><code>.database.windows.net,1433;
Initial Catalog=MyDB;persist security info=True;
User Id=<login>@</login></code><address><code>;Password=<password>;
</password></code>
</address></address>

(требуется пробел между словами (например, "Источник данных" )

Затем вставьте эту строку подключения в файл Web.config. Вы должны получить что-то вроде этого: ...   .database.windows.net, 1433; Начальный каталог = MyDB; информация о безопасности - True; Идентификатор пользователя = @; Пароль = "/" >

(если у вас нет этих тегов - скопируйте его и измените)

Теперь посмотрим на ваши файлы dbContext.

public class DALDbContext : DbContext
{
 public DALDbContext ()
 : base("MyDB")
 {
 }
...
}

убедитесь, что имя connectionString (name= "MyDB" ) из Web.config равно этому значению. (и в других классах dbContext)

В конце концов просто напишите команды update-database в консоли диспетчера пакетов:

update-database -ProjectName:myProject.WEB
update-database -ProjectName:myProject.DAL

licensed under cc by-sa 3.0 with attribution.