在具有MVC 3的远程主机上使用SQL Server CE 4

Jes*_*uez 29 sql-server-ce sql-server-ce-4 asp.net-mvc-3

我刚刚将我的主机升级到MVC 3,但我正在尝试使用SQLCE 4.0做一个"hello world",但我得到了:

很抱歉,在执行您的要求时发生了一个错误.

我看到我的布局和一切,但我看到的不是数据.

在localhost上按预期工作

我有:

<add name="PruebaContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0"/>
Run Code Online (Sandbox Code Playgroud)

作为connectionString.

我把sdf作为项目的一部分,我将System.Data.SqlServerCE.dll添加到项目中,并将本地副本设置为true.

我没有更多的想法.connString,dll在/ bin中,在localhost中工作.

有任何想法吗?

谢谢.

编辑

我现在有一些日志:

没有/ bin上的"System.Data.SqlServerCE.dll":

无法找到请求的.Net Framework数据提供程序.它可能没有安装.

System.ArgumentException:无法找到请求的.Net Framework数据提供程序.它可能没有安装.

很好.他们没有SqlServerCE4.

使用本地副本上的Dll,AKA/bin:

无法加载与版本8482的ADO.NET提供程序对应的SQL Server Compact的本机组件.安装正确版本的SQL Server Compact.有关更多详细信息,请参阅知识库文章974247.

异常详细信息:System.Data.SqlServerCe.SqlCeException:无法加载与版本8482的ADO.NET提供程序对应的SQL Server Compact的本机组件.安装正确版本的SQL Server Compact.有关更多详细信息,请参阅知识库文章974247.

KB说我需要x86和amd64的dll.我在某处读到了如果我将两个目录复制到/ bin,例如:/ bin/x86和/ bin/amd64.我从SqlServerCE 4安装文件夹的私人文件夹中复制了这些文件夹.现在我得到了:

在ADO.NET提供程序和SQL Server Compact的本机二进制文件之间检测到可能的文件版本不匹配,这可能导致功能不正确.这可能是由于存在多个不同版本的SQL Server Compact实例,或者是由于与SQL Server Compact二进制文件具有相同名称的错误二进制文件.请安装匹配版本的SQL Server Compact二进制文件.

好.在SQLServerCE4的根文件夹上我也有一些dll,所以我删除了这两个文件夹并将该dll复制到/ bin:

无法加载文件或程序集'file:/// C:\ HostingSpaces\jesusrod\foxandxss.net\wwwroot\mvc3\bin\sqlceca40.dll'或其依赖项之一.该模块应该包含一个程序集清单.

我想我尝试过所有的事情.Scottgu说SqlServerCE 4应该可以在没有安装的任何服务器上运行.

Jes*_*uez 31

我不喜欢回答我自己的答案,但经过几个小时的工作,我得到了答案!

我们需要:

NuGet(比从程序文件中复制dll更好)

使用NuGet,我们安装:

EFCodeFirst

SqlServerCompact

EFCodeFirst.SqlServerCompact

问题是EF需要另一个用于SQL CE 4的DLL(System.Data.SqlServerCe.Entity.dll),我们需要在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.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

有了它,一切正常.我见过5个不同的错误,所以我们需要:

来自SQL CE 4的2 dll,EF dll,web.config中的配置和本机dll(来自NuGet下载库的包目录).

似乎web.config配置指向SQL CE .dll的具体版本,并且RTM包的版本不同.我找不到具体的版本,所以我使用NuGet的.dll.

这就是远程主机上的SQL CE 4 + EF.

  • @AlexandreBrisebois这个答案很老,如果你有VS2010 SP1,只需转到Project/Add可部署依赖项.这将增加必要的东西. (3认同)

Sko*_*šek 21

只需使用菜单"Project/Add Deployable Dependencies ..."我不确定它是否只是Visual Studio 2010 SP 1.