Я недавно начал использовать миграции Entity Framework и заметил, что имя базы данных не отображается для меня, когда я запускаю команду Update-Database
.
Моя строка подключения:
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
В самый первый раз, когда я запускаю Update-Database , моя база данных создается с правильным именем TestDB .Однако, как только я внесу изменения в одну из своих сущностей, она больше не будет обновляться для меня, если я не добавлю имя запускаемого проекта (я использую многопроектное решение):
Update-Database -StartUpProjectName "TestDB.Data"
Затем будет создана еще одна новая база данных какие миграции всегда будут использовать. Я не против ввести команду StartUpProjectName , но есть ли способ изменить имя по умолчанию для создаваемой базы данных? Он всегда создает базу данных как
TestDB.Data.DataContext
. Есть ли способ гарантировать, что база данных, созданная при передаче имени StartUpProject, называется просто TestDB или это ограничение использования параметра StartUpProjectName?
В качестве обратите внимание, я думаю, что причина, по которой мне нужно указать StartUpProjectName, заключается в том, что у меня есть настройка многослойного проекта. Файл конфигурации миграции находится в моем проекте «Данные», объекты / модели находятся в моем проекте «Домен» и т. Д. У меня также в настоящее время нет никаких параметров инициализации в моем файле Global.asax.cs, как я бы использовал ранее в код сначала ef 4.2. Итак, в моем проекте у меня есть только DataContext в моем проекте Data и конфигурация миграции в этом проекте.
РЕДАКТИРОВАТЬ:
Поскольку я изначально задавал этот вопрос, я наткнулся на «правильный» способ присвоения имени базе данных в многопроектном решении. Хотя приведенный ниже ответ будет работать, это означает, что вы дублируете свой web.config в другой области, что не является идеальным решением. Вместо этого вы можете просто поместить имя в свой DbContext, выполнив что-то вроде этого (DataContext - это просто имя, которое я использовал в своем проекте):
public class DataContext : DbContext
{
public DataContext() : base("DatabaseNameHere")
{ }
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
Спасибо,
Rich