ASP .NET MVC 3实体框架禁用Code First

3

我正在进行ASP .NET MVC3音乐商店教程,但是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
在 Application_Start() 方法中,将您的数据库初始化策略设置为:
DbDatabase.SetInitializer<MusicStoreEntities>(
         new CreateDatabaseIfNotExists<MusicStoreEntities>());

这将使用默认初始化程序,仅在找不到数据库时才会创建它。实际上有三种可能性:

  • CreateDatabaseIfNotExists(如果不存在则创建数据库)
  • DropCreateDatabaseAlways(始终删除并重新创建数据库)
  • DropCreateDatabaseIfModelChanges(如果模型更改则删除并重新创建数据库)

您也可以在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

尝试在您的数据库上下文构造函数或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 First的不错的教程,你可以看一下。还有一个博客文章介绍了不同的初始化选项。


注:EF Code First是一种使用Entity Framework进行数据访问的方法,它允许开发人员通过编写实体类来定义数据库模型,而无需先创建数据库表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接