用MVC3创建的第二个数据库,如何防范?

我对MVC 3很新,我遇到了Code First方法的问题。 我创建了2个模型,一个上下文,视图等,一切都很完美(能够添加,删除等)

但是当我签入Microsoft SQL Management Studio时,我看到了2个数据库。 其中一个是我在web.config中要求的那个。 这个只包含成员资格表

  

第二个有一个奇怪的名字:“RecettesMaison.DB.RecettesMaisonContext”。 它是包含生成的表的那个…

我想知道这个名字的来源,我怎么能这样做所有生成的表只用我指定的名称进入我的connectionstring。 我只想要一个数据库。 我确定它只是上下文中的一个标签,但我无法在谷歌上找到这些信息。

编辑:在一个坚果,我希望我的数据库继续使用DropCreateDatabaseIfModelChanges但我希望它创建具有在连接字符串中指定的名称的数据库,而不是这种情况(它使用命名空间创建一个名称和数据库上下文的名称)

谢谢!

这是因为你没有找到你的数据库的连接字符串,所以CodeFirst通过使用你的DbContext用于文件名的完整命名空间自动创建一个。

通过将filename.mdf更改为所需的文件名,将此文本插入connectionString: AttachDBFilename=|DataDirectory|filename.mdf 。 数据库文件将位于project \ App_Data文件夹中。

你会得到这样的东西:

    

通过在DbContext构造函数中传递connectionStringName,确保您的DbContext使用正确的connectionString,如下所示:

 public class RecettesMaisonContext : DbContext { public RecettesMaisonContext() : base("RecettesMaison") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where( type => type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>)); foreach (object configurationInstance in typesToRegister.Select(Activator.CreateInstance)) { modelBuilder.Configurations.Add((dynamic)configurationInstance); } } ... } 

默认情况下,代码首先会为您创建一个DB。 如果您想要覆盖此行为,请使用

 Database.SetInitializer(null); 

MSDN: msdn.microsoft.com/en-us/library/gg679461(v=vs.103).aspx