【问题标题】:Renaming SQL Server database and MVC5重命名 SQL Server 数据库和 MVC5
【发布时间】:2016-01-11 16:56:25
【问题描述】:

由于不值得讨论的原因,我不得不重命名一个 ASP.NET MVC 项目正在使用的 Microsoft SQL Server 数据库。我认为,在 MVC 方面,这与更改 web.config 中的连接字符串一样简单。唉,没有。

数据库名称从myproject.MODELS.OSESDBCONTEXT 变为myproject

所以,我更改了 web.config 中的默认连接块以反映这一点,其他一切都相同:

<defaultConnectionFactory  
        type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
    <parameters>
        <parameter value="Data Source=machine.company.com;Initial Catalog=MyProject;User ID=someuser; Password=somepassword@;MultipleActiveResultSets=False" />
    </parameters>
</defaultConnectionFactory>

似乎无法连接到数据库,但由于它找不到数据库,它正在尝试创建一个新数据库,但由于.mdf 文件已经存在而失败。但这不是问题,它应该连接到 SQL Server。 这是我在运行网页时遇到的错误:

无法创建文件“C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\MyProject.Models.OSesDBContext.mdf”,因为它已经存在。更改文件路径或文件名,然后重试操作。

【问题讨论】:

  • 这个问题更多是关于实体框架而不是 mvc

标签: sql-server entity-framework visual-studio model-view-controller


【解决方案1】:

您可以通过执行数据库附件来完成您所追求的目标。

您可以尝试通过 SQL Server Management Studio 或通过 T-SQL 重新附加它吗?

首先,将您的 mdf 和 ldf 文件复制到新的文件中(将它们命名为相对于您将附加它们的新数据库)。

然后在附加数据库屏幕中:

  • 在顶部框架的 Attach As 字段中输入数据库的新名称
  • 在底部框架中,浏览到新的 mdf 文件和刚刚创建的新 ldf 文件。
  • 然后您应该有一个新附加的数据库。

【讨论】:

  • 这看起来很有希望。我可以通过 MS-SSMS 和 Visual Studio Server Explorer 连接到重命名的数据库。但是,我在 Visual Studio 中看不到“附加数据库”屏幕。不过,这可能是我的误解。我的本地计算机上不存在该数据库。它在我不管理的服务器上。我不确定在这种情况下底层文件名是否重要。我只是在寻找一种将项目指向新数据库名称的方法。但是,MVC 拥有它。
  • 我想这需要使用 SQL Server Management Studio 来完成,我认为执行数据库附件的工具不会在 Visual Studio 的数据库工具中。
  • 数据库已通过短信重命名。问题是让我的 MVC 应用程序与重命名的数据库对话。
  • 重命名似乎出了点问题,因为您的错误使它看起来好像无法找到数据库。 sys.databases 中的名称是否正确?
【解决方案2】:

我认为不应在 defaultConnectionFactory 中指定数据库名称 - 似乎它首先是关于服务器的。

数据库名称应在别处指定,例如在这里查看可能的选项https://msdn.microsoft.com/en-us/data/jj592674

我只能怀疑旧的数据库名称仍然在上面提到的地方。您是否尝试过在来源中搜索旧名称?

【讨论】:

  • 链接对这个问题没有太大帮助,除非我遗漏了一些东西。它主要谈论对数据库进行更改。不幸的是,我只想让 MVC 连接到新数据库,但它没有。在某个地方,它似乎仍然坚持要连接到旧的,如果不能,则尝试重新创建它。
  • 为什么不去搜索那个提到旧数据库名称的“某处”呢?根据文章,它可能是 1)上下文类的名称 2)上下文的基本构造函数参数 3)connectionStrings 部分中的连接字符串。我不知道您的代码中使用了哪一个,但您可以检查,或者在最坏的情况下,在文件中搜索旧的数据库名称。我很确定,连接工厂不是那个地方,所以难怪它不会对你所做的改变做出反应。
  • 所以,唯一使用旧数据库名称的地方(myproject.models,osesdbcontext)在 webconfig 中。重命名后,我将其更改为“myproject”。我在任何地方都找不到对旧名称的其他引用。
  • "myproject.models,osesdbcontext" 看起来很像选项 1。你可以在构造函数中明确指定数据库名称吗?请注意,如果您重命名数据库,它的文件不会被重命名 - 所以您的 myproject 应该仍然有 osesdbcontext 命名的 mdf 和 ldf。您可以在 SSMS 中重命名它们,但我希望 EF 仍然使用针对您的 dbcontext 命名的数据库 - 除非您明确设置正确的数据库名称
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-04-05
  • 2015-08-20
  • 1970-01-01
  • 2021-08-29
  • 2011-12-04
相关资源
最近更新 更多