将实体框架与SQL Compact专用安装一起使用

Dav*_*man 20 entity-framework sql-server-ce entity-framework-4

我在使用SQL Compact的桌面应用程序中使用Entity Framework 4.我想在我的应用程序中使用SQL Compact 的私有安装,这样我的安装程序就可以安装SQL Compact而无需为用户提供第二次安装.它还避免了版本化的麻烦.

我的开发机器安装了SQL Compact 3.5 SP1作为公共安装,所以我的应用程序在那里运行良好,正如人们所期望的那样.但它没有在我的测试机上运行,​​它没有安装SQL Compact.我收到此错误:

The specified store provider cannot be found in the configuration, or is not valid.
Run Code Online (Sandbox Code Playgroud)

我知道有些人在SQL Compact私有安装方面遇到了困难,但我已经使用了一段时间了,我真的很喜欢它们.不幸的是,我的常规私人安装方法不起作用.我已经检查了我的SQL CE文件上的版本号,它们都是3.8.8078.0,这是SP2 RC版本.

以下是我在私人安装中包含的文件:

  • sqlcecompact35.dll
  • sqlceer35EN.dll
  • sqlceme35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll

我已经将System.Data.SqlServerCe的引用添加到我的项目中,并且我已经验证上面列出的所有文件都被复制到安装机器上的应用程序文件夹中.

以下是我打开SQL Compact文件时用于配置EntityConnectionStringBuilder的代码:

var sqlCompactConnectionString = string.Format("Data Source={0}", filePath);

// Set Builder properties
builder.Metadata = string.Format("res://*/{0}.csdl|res://*/{0}.ssdl|res://*/{0}.msl", edmName);
builder.Provider = "System.Data.SqlServerCe.3.5";
builder.ProviderConnectionString = sqlCompactConnectionString;
var edmConnectionString = builder.ToString();
Run Code Online (Sandbox Code Playgroud)

我错过了一个文件吗?我是否错过了告诉Entity Framework在哪里找到我的SQL Compact DLL所需的配置步骤?任何其他建议为什么EF没有在安装机器上找到我的SQL Compact DLL?谢谢你的帮助.

Dav*_*man 37

由于Steve Lasker博客文章,我想出了如何做到这一点.基本上,这是你必须做的:

(1)System.Data.SqlServerCe.dll在项目中设置引用.将CopyLocal属性设置为True.

(2)在项目的App.config中,添加以下XML标记.它告诉EntityFramework查看SQL Compact的私有安装,以获取其数据提供者:

<system.data>
    <DbProviderFactories>
        <remove invariant="System.Data.SqlServerCe.3.5"/>
        <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>
Run Code Online (Sandbox Code Playgroud)

(3)在安装项目中,将以下文件添加到文件系统编辑器中的应用程序文件夹:

  • sqlcecompact35.dll
  • sqlceme35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.Entity.dll


Jon*_*onx 22

仅供记录,使用SQL CE 4,web.config条目如下:

  <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.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

在私有部署的情况下版本= 4.0.0.1,在一般部署的情况下版本= 4.0.0.0.