Entity Framework Code First的SQL Server Compact 4.0连接字符串?

7

我正在创建一款适用于Windows XP平台的应用程序,因此只能使用.Net Framework 4.0。我尝试使用SQL Server Compact和EF Code First,但在执行update-database时出现了错误。

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

这是我的连接字符串:

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

以及这个错误:

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


请查看ConnectionStrings.com SQL Server Compact 服务页面 - 您的连接字符串无效,应该像这样:Data Source=MyData.sdf;Persist Security Info=False;(不要有任何AttachDbFileName=属性或类似内容……) - marc_s
1
我不理解的是,你正在使用 SQL Server 提供程序,但将问题提出为 SQL Server Compact。这些提供程序不可互操作。 - Erik Philips
4个回答

13
在我的一个项目中,我使用了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提供程序名称会被添加,并且应该在连接字符串中使用。

检查你的web.config是否添加了SqlServerCompact提供程序。

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


我尝试了,但它对我的不起作用,我不知道为什么:) - Andiana
很痛苦,我无法通过Nuget安装SqlserverCompact。尝试解决依赖项'Microsoft.SqlServer.Compact (≥ 4.0.8854.1)'。 - Andiana

2

1

经过多次搜索,我决定采用一种接近SQL compact的解决方案,即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 :) 虽然这不是我的首要目的,但它仍然可以工作。谢谢大家
我只是不知道在Windows XP上部署时,是否需要手动安装Sql Express或Sql Compact相关内容?

1
是的,至少需要安装 Sql Server Express 才能使用 LocalDB。如果使用 Sql Server Compact,则无需安装其他软件。只需在应用程序文件夹中拥有与 Sql Server Compact 相关的 dll 文件即可。 - Ilya Palkin

0
根据MSDN文档,您可以使用以下内容:
<add name="ConnectionStringName"
    providerName="System.Data.SqlServerCe.4.0"
    connectionString="Data Source=|DataDirectory|\DatabaseFileName.sdf" />

附注:如何安装SQL Server Compact


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接