【问题标题】:SQL Server Compact 4.0 connection string for Entity Framework code first?实体框架代码的 SQL Server Compact 4.0 连接字符串首先?
【发布时间】:2014-10-18 15:13:24
【问题描述】:

我正在为 Windows XP 创建一个应用程序,所以我坚持使用 .Net 框架 4.0。我尝试先使用 SQL Server Compact 和 EF 代码,但在 update-database 时出错。

我希望将数据库放在我的代码目录中以部署在客户机器上。

这是我的连接字符串:

<add name="QuanLyKhoContext" 
     connectionString="Data Source=MyData.sdf;Persist Security Info=False;AttachDBFileName=MyData.sdf" 
     providerName="System.Data.SqlClient" />

还有错误:

此操作需要连接到“主”数据库。无法创建到“主”数据库的连接,因为原始数据库连接已打开并且凭据已从连接字符串中删除。提供一个未打开的连接。

【问题讨论】:

  • 看看ConnectionStrings.com for SQL Server Compact - 你的连接字符串无效,它应该是Data Source=MyData.sdf;Persist Security Info=False; 之类的东西(没有AttachDbFileName= 属性或任何类似的属性......)
  • 我不明白您是如何使用 SQL Server 提供程序的,但以 SQL Server Compact 的形式提出问题。这些提供程序不可互操作。

标签: c# entity-framework ef-code-first sql-server-ce connection-string


【解决方案1】:

在我的一个项目中,我使用了 SQL Server Compact 4.0,我的连接字符串非常简单:

  <connectionStrings>
    <add name="MyDB" 
            connectionString="Data Source=|DataDirectory|MyDB.sdf"
            providerName="System.Data.SqlServerCe.4.0" />
  </connectionStrings>

我认为你应该检查你的providerName。我不确定System.Data.SqlClient 是否正确。

您是否安装了EntityFramework.SqlServerCompact NuGet 包?安装后 System.Data.SqlServerCe.4.0 提供者名称 被添加,它应该在连接字符串中使用。

检查SqlServerCompact 提供程序是否已添加到您的web.config

  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlServerCe.4.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
    </providers>
  </entityFramework>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.4.0" />
      <add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>

【讨论】:

  • 我试过了,但它对我的不起作用,我不知道为什么会这样:)
  • 痛苦,我无法通过 nuget 安装 SqlserverCompact 尝试解决依赖关系 'Microsoft.SqlServer.Compact (≥ 4.0.8854.1)'。
【解决方案2】:

为防止这种情况,您需要将连接字符串更改为:

 Trusted_Connection=False;Persist Security Info=True

基于以下链接

http://jayhollingum.blogspot.in/2011/03/ef-codefirst-databasesetinitializser.html

【讨论】:

    【解决方案3】:

    经过多次搜索,我决定转向 SQL 紧凑型的近似方法,即 LocalDB。我改变它并且这项工作:

    <add name="QuanLyKhoContext" connectionString="Data Source=(LocalDB)\v11.0;
    AttachDbFilename=|DataDirectory|MyDB.mdf;Integrated Security=True;Connect Timeout=60" providerName="System.Data.SqlClient" />
    

    我认为“System.Data.SqlClient”是一个有效的提供者,因为我使用的是 Sql Express LocalDB :) 这不是我的第一个目的,但无论如何它都有效。谢谢大家

    只是不知道window XP什么时候部署,需要手动安装Sql Express还是Sql Compact的东西?

    【讨论】:

    • 是的,至少应该安装Sql Server Express 才能使用LocalDB。如果使用Sql Server Compact,则不需要安装额外的软件。在您的应用程序文件夹中有Sql Server Compact 相关的dlls 就足够了。
    【解决方案4】:

    根据MSDN documentation,您可以使用以下内容:

    <add name="ConnectionStringName"
        providerName="System.Data.SqlServerCe.4.0"
        connectionString="Data Source=|DataDirectory|\DatabaseFileName.sdf" />
    

    PS:How to install SQL Server Compact

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      相关资源
      最近更新 更多