Изменить EF 4.1 Code First расположение базы данных по умолчанию

Я работаю над Созданием приложения MVC 3 с помощью Code First и Entity Framework 4.1 учебник на MSDN и застрял на "Также по умолчанию, эта база данных будет базой данных SQL Express с именем, полученным из строго типизированного имени контекста и его файла будет находиться в папке данных SQL Express по умолчанию».

Если я хочу изменить значение по умолчанию (например, поместить файл MDF в папку App_Data), как мне это сделать? У меня будет несколько разных контекстов (по одному для каждой основной функциональной области), и я хотел бы, чтобы все они жили в одной базе данных.


person Eric J.    schedule 12.04.2011    source источник


Ответы (2)


Вы определяете, где находится база данных, используя параметры подключения к файлу web.config. Вам просто нужно сделать имя контекста = имя вашей строки подключения, поэтому, если ваш контекст — это MyContext, вы можете определить местоположение, как показано ниже:

    <connectionStrings>
    <clear/>
        <add name="MyContext" 
         connectionString="Server=myServer;Database=MyDB;Uid=foo;Password=XXX; " 
         providerName="System.Data.SqlClient"
           />


  </connectionStrings>
person Daveo    schedule 12.04.2011
comment
Если я хочу, чтобы все контексты находились в одной и той же физической БД, могу ли я просто предоставить несколько записей с соответствующими элементами name и одним и тем же элементом connectionString? - person Eric J.; 12.04.2011
comment
Я никогда не пробовал это, но да, похоже, что это должно работать, вам просто нужно быть осторожным с инициализацией вашей БД, чтобы она не пыталась удалить и создать БД для каждого контекста? то есть вам, возможно, придется использовать CreateDatabaseIfNotExists вместо DropCreateDatabaseIfModelChanges или DropCreateDatabaseAlways - person Daveo; 12.04.2011

В ответ на ваш второй вопрос...

«У меня будет несколько разных контекстов (по одному для каждой основной функциональной области), и я бы хотел, чтобы все они жили в одной базе данных».

Почему бы не попробовать...

MyContext.cs

public partial class MyContext : DbContext
{
}

FooContext.cs

partial class MyContext
{
    public DbSet<Foo> Foos { get; set; }
}

Барконтекст.cs

partial class MyContext
{
    public DbSet<Bar> Bars { get; set; }
}

В итоге вы получите один контекст и одно соединение, но ваш код разбит на несколько файлов. Надеюсь, это то, чего вы пытаетесь достичь.

person Oundless    schedule 03.04.2013