4

我对 MVC 3 很陌生,我对 Code First 方法有疑问。我创建了 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”。它是包含生成表的那个......

我想知道这个名字是从哪里来的,我该怎么做才能让所有生成的表只用我指定的名字进入我的连接字符串。我只想要一个数据库。我确定它只是上下文中的一个标签,但我在谷歌上找不到这个信息。

编辑:简而言之,我希望我的数据库继续使用,DropCreateDatabaseIfModelChanges<RecettesMaisonContext>但我希望它使用连接字符串中指定的名称创建数据库,但事实并非如此(它使用命名空间和数据库的名称创建一个名称语境)

谢谢!

4

2 回答 2

1

默认情况下,code first 将为您创建一个数据库。但是,如果您想覆盖此行为,只需使用

Database.SetInitializer<YourDataContext>(null);

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

于 2012-08-28T12:21:16.227 回答
1

这是因为您没有找到数据库文件的 connectionString,因此 CodeFirst 通过使用 DbContext 文件名所在的完整命名空间自动创建一个。

通过将filename.mdf更改为所需的文件名,将此文本插入到 connectionString 中:AttachDBFilename=|DataDirectory|filename.mdf。数据库文件将位于您的project\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);
        }
    }

    ...
}
于 2012-08-28T11:44:01.097 回答