如何将 ASP.NET MVC 数据库从 LocalDb 传输到 SQL 服务器?

How to transfer ASP.NET MVC Database from LocalDb to SQL Server?

我在 Visual Studio 2013 年创建了一个新的 ASP.NET MVC 5 项目(Express for Web),默认情况下,该项目使用 LocalDb 作为其数据库,但是你如何将数据库传输或迁移到 SQL 服务器?

我想为数据库使用 SQL 服务器而不是 LocalDb。但是怎么办?

更改 web.config

中的 connectionString
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-KlikRX-20141203034323.mdf;Initial Catalog=aspnet-Test-20141203034323;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

到你自己的数据库connectionString,例如:

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=7.7.7.7\sql;Initial Catalog=TestDB;User ID=sa;Password=sa" />
  </connectionStrings>

听起来您可能想将数据从本地数据库移动到 sql 服务器。如果是这样,最简单的方法是备份本地数据库,然后在服务器上恢复它。

要备份: https://msdn.microsoft.com/en-us/library/ms187510.aspx#SSMSProcedure

恢复: https://msdn.microsoft.com/en-us/library/ms177429.aspx

编辑:

如果您需要安装SQL服务器实例: https://msdn.microsoft.com/en-us/library/ms143219.aspx

知道了!

根据@warheat1990 的回答,您只需更改连接字符串即可。但是@warheat1990 的回答变化太大了。所以这是我原来的 (LocalDb) 连接字符串:

<add name="DefaultConnection"
     connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-my_project-20150318100658.mdf;Initial Catalog=my_project-20150318100658;Integrated Security=True"
     providerName="System.Data.SqlClient"/>

要将它连接到 SQL 服务器而不是 LocalDB,我将连接字符串修改为:

<add name="DefaultConnection"
     connectionString="Data Source=SERVERNAME\SQLEXPRESS;Initial Catalog=my_project;Integrated Security=True"
     providerName="System.Data.SqlClient"/>

感谢@warheat1990 提出简单更改 Web.config 的想法。我的第一个想法是识别和使用 VS 提供的功能(如果有的话)。因为 Microsoft 没有关于如何执行此操作的简明文档。

尽管这个问题很老,但答案对我没有帮助,所以我想分享一下我是如何解决这个问题的。

在服务器资源管理器中,找到您的 ASPNet 数据库。然后使用 SQL 服务器对象资源管理器打开它。

然后点击 Schema Compare 选项

然后在目标数据库的架构比较window 上,select SQL 您希望 ASPNet 数据库集成到的服务器数据库。然后点击比较按钮

取消select 目标数据库的所有删除操作,并保留 select ASPNet 数据库的所有添加操作,然后点击更新按钮。

最后,更新您的连接字符串,使其指向您的 SQL 服务器数据库

我遇到了同样的问题,刚刚解决了这个...所以要点是默认连接字符串...您需要正确修改它,否则它毫无意义..并且无法正确连接。因此,将所有 aspnetroles...users table 复制到在线数据库(它们看起来应该与本地数据库中的一样)。 您可以将模式(本地数据库)与真实数据库进行比较。 "Overlord" ->

很好地解释了它

但是现在让我们正确修改默认连接字符串之后 这是我修改前的默认字符串:

 <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-track_spa-20180502025513.mdf;Initial Catalog=aspnet-track_spa-20180502025513;Integrated Security=True" providerName="System.Data.SqlClient" />

也就是我修改后的默认字符串:

<add name="DefaultConnection" connectionString="Data Source=servername,portnumber;Initial Catalog=AttendanceTrak;Integrated Security=False;User Id=****;Password=*****;Encrypt=True;TrustServerCertificate=False;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

servername - 应该是您的服务器。 portnumber - 应该是你的服务器端口

我花了很长时间才让它正常工作...但是这个使用默认字符串的小技巧成功了! 希望这有帮助

我有一个类似的问题,想从本地数据库导出到远程数据库服务器,遇到了一条错误消息,我找不到任何相关信息,但是在阅读这篇文章时我找到了答案post, 所以我在这里提交我的答案以防其他人遇到同样的问题。

我使用个人用户帐户设置了一个解决方案。 VS 方便地在 web.config.

中创建了一个数据库(App_Data 下的 mdf 文件)和一个连接字符串

在我所有的智慧中我认为:"Why not move this to a remote server?"所以我做到了。

我恢复了远程服务器上的 mdf 文件,用我网站的一些简单表格扩展了它,创建了一个新的数据库连接并添加了一个新的 ado.net edmx 文件,删除了 "DefaultConnection" 在 web.config 中更新了对我在 ApplicationDBContext 中的新连接的引用。

按下播放键,然后...没有 sigar(尝试登录时)。

The entity type IdentityUserLogin is not part of the model for the current context.

原来 IdentityDbContex 更喜欢带有 providerName="System.Data.SqlClient" 的 "DefaultConnection",因此添加带有 providerName="System.Data.EntityClient" 的新 edmx 文件并不好。

解决方案:按照 warheat1990 的建议,我更新(放回)了 DefaultConnections 及其连接字符串值。

有人可能会争辩说我应该有两个单独的数据库(一个用于用户)和一个用于业务,但这是另一个讨论。

关于 OverLords 的回答,它非常适合我,谢谢!

如果有人为连接字符串而苦恼,请使用:

    <add name="CONNECTIONSTRINGNAME" connectionString='data source= DATABASE SOURCE initial catalog=&quot;DATABASE NAME &quot;;user id=&quot;USERID&quot;;password=PASSWORD;MultipleActiveResultSets=True;' providerName="System.Data.SqlClient" />

这对我有用.. 更改指向数据库服务器的 Web 配置文件中的连接字符串,然后 运行 应用程序并注册用户。注册成功后,转到 SSMS 并刷新数据库,然后身份表就会出现。

此致

Overlord 的迁移示例恰到好处。我最后的注释对于评论来说有点大,所以这里是对 web.config 文件的必要更改。本地驱动器上的旧方法是指定

Data Source=".\[InstanceName]

但可能不适用于较新的界面,因此如果您向前迁移,请将 [.\instance] 替换为 [ComputerName\instance]。这是 Visual Studio Pro 2017,SQL Server 2014 & Entity Framework 6.0.

第一次更新连接字符串.. 用连接到数据库所需的信息替换括号中的项目。

<connectionStrings>
   <add name="DefaultConnection" 
    connectionString="Initial Catalog=[DatabaseName];Integrated Security=True;User ID=[SQLASPNETUserName];Password=[UserPassword];"
    providerName="System.Data.SqlClient" />
</connectionStrings>

接下来更新实体信息。可以从 [SQL 服务器管理] 控制台找到用于 SQL 服务器的 [InstanceName] - [服务器属性] - [高级] - [文件流共享名称] & 默认为 [MSSQLSERVER].

<entityFramework>
  <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
     <parameters>
        <parameter value="[ServerName]\[InstanceName]"/>
     </parameters>
  </defaultConnectionFactory> 
  <providers>
     <provider invariantName="System.Data.SqlClient" 
      type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
  </providers>
</entityFramework>

对于云或其他多服务器数据库迁移,还请查看 web.config 中的 [sessionState] 设置并将 [InProc] 替换为 [Custom]。 [sessionState] 介于 [/roleManager] 和 [/system.web]

之间

这是 1 个数据库服务器的默认值

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
  <providers>
    <add name="DefaultSessionProvider"
      type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      connectionStringName="DefaultConnection"/>
  </providers>
</sessionState>

& 这是多服务器或云环境的替代品

<sessionState mode="Custom" customProvider="DefaultSessionProvider">