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

问题描述 投票:33回答:10

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

我想将SQL Server用于数据库而不是LocalDb。但是怎么样?

sql-server asp.net-mvc database localdb
10个回答
39
投票

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

在Server Explorer上,找到您的ASPNet DB。然后使用SQL Server对象资源管理器打开它。

enter image description here

然后去点击Schema Compare选项

Compare Schemas

然后在Target数据库的Schema Compare窗口中,选择您希望ASPNet DB集成到的SQL Server数据库。然后点击比较按钮

Set Options

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

Update

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


21
投票

得到它了!

基于@ 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 Server而不是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没有关于如何执行此操作的简明文档。


6
投票

更改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>

3
投票

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

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

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

编辑:

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


0
投票

我有同样的问题,只是解决了这个...所以主要的一点是默认连接字符串...你需要正确修改,否则它是没有意义的..并且无法正确连接。因此,将所有aspnetroles ...用户表复制到在线数据库(它们应该与本地数据库中的相同)。您可以将模式(本地数据库)与实际数据库进行比较。它被“霸王” - > Explanation解释得很好

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

 <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" />

服务器名称 - 应该是您的服务器。端口号 - 应该是您的服务器端口

我花了很长时间才使它正常工作......但是这个带有默认字符串的小技巧就成了它!啤酒花有帮助


0
投票

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

我使用个人用户帐户设置了一个解决方案。 VS方便地创建一个db(app_Data下的mdf文件)和web.config中的连接字符串。

在我所有的智慧中,我想:“为什么不将它移到远程服务器上?”所以我做了。

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

按下游戏,并且......没有糖(当试图登录时)。

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及其的connectionstring值。

有人可能会说我应该有两个单独的dbs(一个用于用户)和一个用于商业用途,但这是另一个讨论。


0
投票

关于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" />

0
投票

这适用于我..更改指向数据库服务器的Web配置文件中的连接字符串,然后运行该应用程序并注册用户。成功注册后,转到SSMS并刷新数据库,然后应显示标识表。

问候


0
投票

霸王的迁移示例是现场。最后我的注释对于注释来说有点大,所以这里是web.config文件所需的更改。本地驱动器上的旧方法是指定

Data Source=".\[InstanceName]

但可能无法在较新的接口上工作,因此如果向前迁移,请将[。\ instance]替换为[ComputerName \ instance]。这是Visual Studio Pro 2017,SQL Server 2014和Entity Framework 6.0。

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

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

下一次更新实体信息..用于SQL Server的[InstanceName]可以从[SQL Server Mgmt]控制台 - [服务器属性] - [高级] - [文件流共享名称]中找到,默认为[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 db服务器

<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">
© www.soinside.com 2019 - 2024. All rights reserved.