与MVC3创建第二个数据库,如何防止?(Second database created with M

2019-09-21 19:31发布

我很新的MVC 3,我有守则第一种方法的问题。 我创建了2个型号,一个背景下,视图,等一切都运行完美(可以添加,删除等)

但是,当我在Microsoft SQL Management Studio中检查,我看到2个数据库。 其中之一是一个我在web.config中提出的要求。 这其中只包含成员关系表

<connectionStrings>
<add name="RecettesMaison" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=RecettesMaison;User Id=user;Password=password;"
     providerName="System.Data.SqlClient"/>

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

我想知道这个名字是从哪里来的,我可以这样做的所有生成的表进入我的ConnectionString只有我指定的名称如何。 我只想一个数据库。 我敢肯定它的地方,只是一个标签的情况下,但我找不到对谷歌这一信息。

编辑:在nutshel,我想我的数据库使用,以保持DropCreateDatabaseIfModelChanges<RecettesMaisonContext>但我想它来创建连接字符串,这是不是这种情况在指定的名称数据库(它使用的命名空间和创建一个名称数据库上下文的名称)

谢谢!

Answer 1:

这是因为,你有ConnectionString中没有找到你的数据库文件,以便CodeFirst通过使用在您的DbContext是文件名完整的命名空间创建一个automaticaly。

通过改变你想要的文件名filename.mdf插入在ConnectionString这样的文字: AttachDBFilename=|DataDirectory|filename.mdf 。 该数据库文件将在您的项目\ App_Data文件夹。

你有这样的事情:

<connectionStrings>
    <add name="RecettesMaison" connectionString="Data Source=.\SQLEXPRESS;Initial catalog=RecettesMaison;AttachDBFilename=|DataDirectory|filename.mdf;User Id=user;Password=password;" providerName="System.Data.SqlClient"/>
</connectionStrings>

要确保您的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);
        }
    }

    ...
}


Answer 2:

默认情况下,代码首先会为你创建一个数据库。 不过,若你想覆盖此行为只是使用

Database.SetInitializer<YourDataContext>(null);

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



文章来源: Second database created with MVC3, how to prevent?