gpt4 book ai didi

c# - 用 MVC3 创建的第二个数据库,如何防止?

转载 作者:行者123 更新时间:2023-11-30 12:32:04 25 4
gpt4 key购买 nike

我是 MVC 3 的新手,我对 Code First 方法有疑问。我创建了 2 个模型、上下文、 View 等,一切都很完美(能够添加、删除等)

但是当我检查 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>但我希望它使用连接字符串中指定的名称创建数据库,但事实并非如此(它使用命名空间和数据库上下文的名称创建了一个名称)

谢谢!

最佳答案

这是因为您没有找到数据库文件的 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);
}
}

...
}

关于c# - 用 MVC3 创建的第二个数据库,如何防止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12158114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com