Недавно я начал использовать миграции 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, заключается в том, что у меня есть многоуровневая настройка проекта. Файл конфигурации Migrations находится в моем проекте "Данные", объекты/модели находятся в моем проекте "Домен" и т.д. У меня также нет параметров инициализации в файле Global.asax.cs, как я бы использовал ранее сначала код ef 4.2. Поэтому в моем проекте у меня просто есть DataContext в моем проекте Data и Migrations Configuration в этом проекте.
EDIT:
Поскольку я изначально задал этот вопрос, я наткнулся на "правильный" способ назвать базу данных в многопроектном решении. Хотя ответ ниже будет работать, это означает, что вы дублируете свой 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();
}
}
Спасибо,
Рич