ASP .NET MVC 3 Entity Framework сначала отключает код - PullRequest
3 голосов
/ 15 мая 2011

Я занимаюсь обучением ASP .NET MVC3 Music store и вместо подключения к присоединенной базе данных EF создает новую базу данных в SQLEXPRESS (сначала код).Как я могу предотвратить это. При использовании конфигурации EF я должен подключаться к существующей базе данных, а не создавать новую.У меня есть класс DbContext, как показано ниже

using System.Data.Entity;
namespace MusicStore.Models
{
    public class MusicStoreEntities:DbContext
    {
        public DbSet<Album> Albums { get; set; }   
        public DbSet<Genre> Genres { get; set; }
    }
}

И мой web.config имеет следующую строку подключения

<connectionStrings>
    <add name="MusicStoreEntities"
         connectionString="data source=.\SQLEXPRESS;         Integrated Security=SSPI;       
         AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf;       User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

Ответы [ 2 ]

4 голосов
/ 22 мая 2011

В Application_Start () установите стратегию инициализации базы данных на:

DbDatabase.SetInitializer<MusicStoreEntities>(
         new CreateDatabaseIfNotExists<MusicStoreEntities>());

При этом будет использоваться инициализатор по умолчанию, и база данных будет создаваться только в том случае, если она не сможет ее найти.На самом деле существует три возможности:

  • CreateDatabaseIfNotExists
  • DropCreateDatabaseAlways
  • DropCreateDatabaseIfModelChanges

Вы также можете выполнить некоторую пользовательскую инициализацию, используя это вyour Application_Start ()

Database.SetInitializer<MusicStoreEntities>(new MusicStoreEntityInitializer());

Затем добавьте новый класс, производный от одного из трех типов инициализации, в зависимости от того, что вам нужно.

namespace MusicStore.Models
{
  public class MusicStoreEntityInitializer : 
           CreateDatabaseIfNotExists<MusicStoreEntityInitializer> 
  {
      protected override void Seed(MusicStoreEntity context)
      {
         base.Seed(context);

         // your code to populate db with test data
      }
  } 
}

При таком типе настройкиУ вас много гибкости.

3 голосов
/ 22 мая 2011

Попробуйте установить нулевой инициализатор в конструкторе вашего контекста БД или в Application_Start:

public class MusicStoreEntities: DbContext
{
    public DbSet<Album> Albums { get; set; }   
    public DbSet<Genre> Genres { get; set; }

    public MusicStoreEntities(string connectionString): base(connectionString)
    {
        Database.SetInitializer<MusicStoreEntities>(null);
   }
}

Вот хороший учебник , на который вы могли бы обратить внимание в первую очередь об EF Code. И вот сообщение в блоге , объясняющее различные варианты инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...