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

     2023-02-26     300

关键词:

【中文标题】用 MVC3 创建的第二个数据库,如何防止?【英文标题】:Second database created with MVC3, how to prevent? 【发布时间】:2012-08-28 11:16:42 【问题描述】:

我对 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”。它是包含生成表的那个...

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

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

谢谢!

【问题讨论】:

msdn.microsoft.com/en-us/library/gg679461(v=vs.103).aspx - 只需执行 Database.SetInitializer(null);这将覆盖该行为 谢谢,我今晚试试。你能写一个真实的答案而不是评论,这样我就可以给你一个好的答案了吗? 【参考方案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);
        
    

    ...

【讨论】:

我的 App_Data 文件夹中没有任何内容,因为我的数据库托管在 Management Studio 附带的 SQL Server Express 中(不在 Visual Studio 中)。还有其他想法吗? 你能确认你的 DbContext 使用了正确的 connectionString 吗?如果您在 DbContext 的构造函数中传递了 connectionStringName,请告诉我。如果没有,就在那里做。 您有任何示例说明如何执行此操作,因为现在,我的 DBContext 没有构造函数。它只有 OnModelCreating 的覆盖 谢谢!但是现在当我执行 SaveChange() 时,我得到一个异常 (DbUpdateException),就像没有表一样......我即将放弃:( 这是因为您的数据库已经创建并且 CodeFirst 不知道要在您的架构中添加或更新什么。如果可以,请删除您的数据库并让 CodeFirst 自己创建它。或者,手动将表添加到数据库中。【参考方案2】:

默认情况下,代码首先会为您创建一个数据库。但是,如果您想覆盖此行为,只需使用

Database.SetInitializer<YourDataContext>(null);

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

【讨论】:

这不起作用。我希望创建或删除我的数据库,但使用连接字符串中指定的名称。我认为这很正常,因为生产服务器上的用户无法创建数据库,但可以使用现有数据库。此外,“自动”名称一点也不有趣。还有其他想法吗?

单击按钮时防止jquery ui打开第二个对话框

...对话框,其中包含一个表单,可以将一些信息发送到我的数据库。当我的第一层被选中并单击“保存”按钮时,它会打开与我的第一层对应的对话框。但是 查看详情

如何获取每个月的第二个星期五的日期范围?

】如何获取每个月的第二个星期五的日期范围?【英文标题】:Howtogetadaterangeofthe2ndFridaysofeachmonth?【发布时间】:2016-08-0901:00:55【问题描述】:我需要用Python获取每个月的第二个星期五。我已经编写了下面的函数来演示我需要什... 查看详情

如何将两个熊猫列混合到一个数据框中,第一列的第一个元素,第二列的第二个元素等等? [复制]

】如何将两个熊猫列混合到一个数据框中,第一列的第一个元素,第二列的第二个元素等等?[复制]【英文标题】:Howtomixtwopandascolumnsintoonedataframewithfirstelementfromfirstcolumn,secondelementfromsecondcolumnandsoon?[duplicate]【发布时间】:2021-02... 查看详情

如何使用 json 原始数据在 vuejs 中制作依赖的第二个列表?

】如何使用json原始数据在vuejs中制作依赖的第二个列表?【英文标题】:howtomakedependentsecondlistinvuejsusingjsonrawdata?【发布时间】:2021-08-3106:46:36【问题描述】:所以我将州和地区列表存储在.json文件中。我可以在第一个菜单中显示... 查看详情

访问数据视图中的第二个表

】访问数据视图中的第二个表【英文标题】:Accessing2ndtableindataview【发布时间】:2011-04-1913:34:25【问题描述】:我有一个运行存储过程的sqlDataSource,该存储过程返回作为参数传入的月份中的天数表,其排列方式与日历中的排列... 查看详情

如何在 Index.cshtml MVC3 上显示两个 Partials 视图数据?

...个具有控制两个下拉列表。第二个有webgrid,它显示来自数据库的数据。partialview1.cshtml@modelMappi 查看详情

如何在 UIPickerView 的第一个组件中显示数据,直到第二个组件中特定行的开始?

】如何在UIPickerView的第一个组件中显示数据,直到第二个组件中特定行的开始?【英文标题】:HowtonotdisplaydatainfirstcomponentofUIPickerViewuntilthestartofspecificrowinsecondcomponent?【发布时间】:2017-04-0705:11:20【问题描述】:如果这与以下问... 查看详情

LayoutInflater类的inflate方法中的第二个参数怎么用,Android

】LayoutInflater类的inflate方法中的第二个参数怎么用,Android【英文标题】:howdoyouusethesecondparameterintheinflatemethodoftheLayoutInflaterclass,Android【发布时间】:2013-03-3109:06:03【问题描述】:LayoutInflater抽象类的inflate方法具有以ViewGroup为根... 查看详情

如何访问列表中的第二个参数?

】如何访问列表中的第二个参数?【英文标题】:HowcanIaccessthesecondargumentinthelist?【发布时间】:2013-07-2517:22:35【问题描述】:我想知道如何访问列表中的第二项?我的意思是字符串输出这个:07-1721:15:38.723:D/MYAPP(15806):feeling=joyful... 查看详情

如何找到 MIPS 中的第二个最小值?

】如何找到MIPS中的第二个最小值?【英文标题】:howcanifindthesecondminimumvalueinMIPS?【发布时间】:2021-07-0907:33:07【问题描述】:在这个项目中,您将实现一个MIPS应用程序找到第二个最小值在声明的数组中。下面给出了如何定义整... 查看详情

在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器

...erView【发布时间】:2019-06-2015:45:55【问题描述】:我正在创建我的第一个应用程序,我希望在UI选择器中选择项目时在第二个视图控制器中显示数据。当点击我的第一个视图控制器上的搜索栏时 查看详情

使用依赖注入时,如何修复“在前一个操作完成之前在此上下文中启动的第二个操作......”?

...cyinjection?【发布时间】:2018-03-0519:54:33【问题描述】:从数据库读取数据时出现此错误:在 查看详情

XCode iPhone 多个目标 - 创建了第二个不同名称的可执行文件,但我的第二个“可执行文件”的“路径”是错误的

】XCodeiPhone多个目标-创建了第二个不同名称的可执行文件,但我的第二个“可执行文件”的“路径”是错误的【英文标题】:XCodeiPhoneMultipleTargets-Seconddifferentlynamedexecutableiscreated,butthe"path"ofmysecond"executable"iswrong【... 查看详情

如何去除 Flutter 中的第二个应用栏?

】如何去除Flutter中的第二个应用栏?【英文标题】:HowtoremovethesecondappbarinFlutter?【发布时间】:2020-04-0512:44:04【问题描述】:我开发了一个Flutter包,它有自己的本地化和主题,因此我在包中使用了MaterialApp小部件。returnMaterialApp... 查看详情

动态数据源作为 Spring Boot + Hibernate 中的第二个数据源

】动态数据源作为SpringBoot+Hibernate中的第二个数据源【英文标题】:DynamicdatasourceasseconddatasourceinSpringBoot+Hibernate【发布时间】:2017-06-2413:25:50【问题描述】:我有一个关于如何在SpringBoot应用程序中处理两个不同数据源的问题。用... 查看详情

如何摆脱 Pandas 中的第二个索引列? (Python)

】如何摆脱Pandas中的第二个索引列?(Python)【英文标题】:HowdoIgetridofthesecondindexingcolumninPandas?(Python)【发布时间】:2019-05-0508:49:04【问题描述】:我正在尝试制作工资与时间的关系图。这是我得到的:importpandasaspdimportmatplotlib.... 查看详情

如何防止从命名空间内访问类?

...据模型类,另一个定义了一个继承第一个的数据模型类。第二个命名空间还定义了一个实用程序类,它是唯一允许使用第二个数据模型类的类..namespaceApubli 查看详情

markdown如何查找列表中的第二个最小数字(代码片段)

查看详情