【问题标题】:How to transfer ASP.NET MVC Database from LocalDb to SQL Server?如何将 ASP.NET MVC 数据库从 LocalDb 传输到 SQL Server?
【发布时间】:2015-05-20 17:09:34
【问题描述】:

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

我想为数据库使用 SQL Server 而不是 LocalDb。但是怎么做呢?

【问题讨论】:

  • LocalDB 面向开发人员的 SQL Server 版本.....

标签: sql-server asp.net-mvc database localdb


【解决方案1】:

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

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

然后去点击Schema Compare选项

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

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

最后,更新你的连接字符串,让它指向你的 SQL Server 数据库

【讨论】:

  • 太棒了!非常感谢:)
  • 使用架构比较作为测试登录方法的机会。创建新的 SQL 安全登录作为指定数据库的所有者和安全管理员,以使用标准 SQL 登录进行测试,而不是使用 Windows 登录.应该适用于任何网络数据库。希望我可以为这个答案放弃+10。它是卓越和完整的缩影!
【解决方案2】:

知道了!

根据@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 提供的功能(如果有的话)。因为微软没有关于如何做到这一点的简明文档。

【讨论】:

  • 对于这种常见的情况,它肯定不是一个直接的答案。我想知道您是否必须更改默认连接工厂?我尝试了两种方式,似乎两种方式都有效。
【解决方案3】:

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

到你自己的数据库连接字符串,例如:

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

【讨论】:

  • 谢谢!但是你的代码不起作用。 VS 说“数据源”键无法识别。您以正确的方式更改连接字符串即可。请参阅我自己对这篇文章的回答以获得答案。
  • @doncadavona 可能是因为 providerName="System.Data.SqlClient" 在 warheat1990 的代码中不存在
【解决方案4】:

听起来您可能希望将数据从本地数据库移动到 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

【讨论】:

    【解决方案5】:

    Overlord 的迁移示例是正确的。我最后的注释有点大,所以这里是对 web.config 文件的必要更改。本地驱动器上的旧方法是指定

    Data Source=".\[InstanceName]
    

    但可能不适用于较新的接口,因此如果您向前迁移,请将 [.\instance] 替换为 [ComputerName\instance]。这是 Visual Studio Pro 2017、SQL Server 2014 和实体框架 6.0。

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

    <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] 控制台 - [Server Properties] - [Advanced] - [Filestream Share Name] 中找到,默认为 [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">
    

    【讨论】:

      【解决方案6】:

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

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

       <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 - 应该是你的服务器端口

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

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

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

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

          我在远程服务器上恢复了 mdf 文件,为我的网站添加了一些简单的表格,创建了一个到 db 的新连接并添加了一个新的 ado.net edmx 文件,删除了网络中的“DefaultConnection” .config 并在 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 及其连接字符串值。

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

          【讨论】:

            【解决方案9】:

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

            问候

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-05-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-07-09
              相关资源
              最近更新 更多