Миграции (Entity Framework 4.3) - скрипт не выполняется - PullRequest
2 голосов
/ 08 марта 2012

Сценарии генерируются правильно, я использую несколько слоев, поэтому в консоли диспетчера пакетов выполняются следующие команды

Например.Когда я добавил в таблицу столбец «Электронная почта»: «Владелец»

Add-Migration AddEmailToOwner -StartupProjectName "FacturatieMVCv2.Data" -Verbose

-> Результат:

Using NuGet project 'FacturatieMVCv2.Data'.
Target database is: 'FacturatieMVCv2.Data.Website.MyResellerContext' (DataSource: V-File   \SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).

Следующая команда, которую я использую:

Update-Database -StartupProjectName "FacturatieMVCv2.Data" -Verbose

-> Результат:

Using NuGet project 'FacturatieMVCv2.Data'.
Target database is: 'FacturatieMVCv2.Data.Website.MyResellerContext' (DataSource: V-FILE\SQLEXPRESS, Provider: System.Data.SqlClient, Origin: Convention).
Applying explicit migrations: [201203080906140_AddDamnToOwner].
Applying explicit migration: 201203080906140_AddDamnToOwner.
ALTER TABLE [Owners] ADD [Damn] [nvarchar](max)
[Inserting migration history record]

Моя строка подключения в App.Config:

<parameter value="Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=n*****3;" />

Несмотря на то, что я указал Начальный каталог, он настроен на неправильный каталог.Создана / обновлена ​​таблица базы данных с именем: FacturatieMVCv2.Data.Website.MyResellerContext.

Ниже приведен мой app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
  <parameters>
        <!--<parameter value="Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True" />-->
        <parameter  value="Server=V-FILE02\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=12345678;" />
      </parameters>
    </defaultConnectionFactory>
  </entityFramework>
    </configuration>

Короче говоря, команда Update-Database обновила неправильнобазы данных.

Ответы [ 3 ]

1 голос
/ 08 марта 2012

Используя следующую команду:

Update-Database -StartupProjectName "FacturatieMVCv2.Data" -Verbose -ConnectionString "Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=mydbuser;password=mydbpass;" -ConnectionProviderName "System.Data.SqlClient"

Исправлена ​​моя проблема.

0 голосов
/ 28 декабря 2014

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

Подробнее об этом:

Наш класс Db (тот, который наследует DbContext) имеет конструктор наподобие

    public Db()
#if AltDb
        : base("AltDb")
#else
        : base("Db")
#endif
    {
    }       

Так что, если переменная сборки AltDb определена, она будет использовать ConnectionString с именем AltDb; в противном случае он использует тот, который называется Db. В наших конфигах Project у нас есть один с именем AltDb, и все, что он делает, это определяет переменную сборки AltDb.

Итак, у нас есть две строки подключения, определенные в Web.Config:

<connectionStrings>
    <add name="Db" connectionString="Initial Catalog=MyProj;Data Source=.\SQLEXPRESS...
    <add name="AltDb" connectionString="Initial Catalog=Staging;Data Source...

Итак, когда мы хотим обновить альтернативную базу данных, мы ДОЛЖНЫ иметь возможность просто переключать конфигурации сборки и запускать update-database. Это работало в каждом проекте годами, но сегодня это просто не будет.

Когда я запустил Clean, то удостоверился, что эта конфигурация сборки была выбрана, и проект запуска был выбран, и явно построен, волшебным образом это было решено - даже несмотря на то, что EF создает все при каждом запуске update-database. *

У меня нет объяснения, почему это произойдет, но это причина и решение для нас.

0 голосов
/ 08 марта 2012

SqlConnectionFactory добавляет исходный каталог к ​​предоставленному вами значению.Если вы хотите использовать определенную строку подключения для контекста, вам следует добавить запись в разделе connectionStrings.Например,

<connectionStrings>
  <add name="MyResellerContext" connectionString="Server=V-FILE\SQLEXPRESS;Persist Security Info=True;Initial Catalog=ProductionReseller;uid=sa;password=12345678;" providerName="System.Data.SqlClient" />
</connectionStrings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...