Как явно назвать базу данных при использовании Entity Framework Migrations 4.3

Я недавно начал использовать миграции 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

58
задан Richard Reddy 8 March 2012 в 14:38
поделиться