Я не могу понять, почему создается другая база данных, когда я запускаю команду update-database
вместо применения отложенных миграций к существующей базе данных. Сценарий, кажется, случается спорадически. Это крутые склоны, к которым я привык при переносе:
- Установите для проекта диспетчера пакетов значение
MySolution.MyProject
; - Выполните команду
update-database
. Время от времени он создает новую базу данных с моим полным именем класса в контексте, например:MySolution.MyProject.MyContext
; - В SQL Server Management Studio я удаляю только что созданную базу данных
MySolution.MyProject.MyContext
; - Снова выполните ту же команду
update-database
. Затем EF правильно находит мою базу данных с именем onlyMyContext
и применяет только ожидающие миграции.
Последний шаг - это сначала желаемый результат. Хочу понять: зачем создается эта другая база данных? Разве EF не должен узнавать правильное имя при первом запуске? Почему он работает правильно, когда я бегаю во второй раз? Я, должно быть, делаю что-то ужасно неправильно.
Вот мой проект миграции - файл MySolution.MyProject.MyContext
, app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings>
<add name="MyContext" connectionString="Data Source=.\SQLDEV;Initial Catalog=MyContext;Persist Security Info=True;User ID=my_user;Password=my_password;Pooling=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
...
</configuration>
Я дал пользователю базы данных все привилегии на моем компьютере (Пользователь SQL> Роли сервера).
А вот мой файл MyContext.cs:
namespace MySolution.MyProject
{
public class MyContext : DbContext
{
public MyContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
public MyContext(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
public MyContext(DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{
}
public MyContext(ObjectContext objectContext, bool dbContextOwnsObjectContext)
: base(objectContext, dbContextOwnsObjectContext)
{
}
// ... lots of stuff...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
base.OnModelCreating(modelBuilder);
}
}
}
Приветствуются любые предложения о том, как я могу понять / отладить / узнать, что происходит.
-verbose
при обновлении базы данных. Я ВСЕГДА его использую, так как он дает вам представление о том, что на самом деле делает EF. - person DrewJordan   schedule 09.02.2015