29

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

抱歉,处理您的请求时出现了一个错误。

我看到了我的布局和所有内容,但我看到的不是数据。

在本地主机上按预期工作

我有:

<add name="PruebaContext" connectionString="Data Source=|DataDirectory|db.sdf" providerName="System.Data.SqlServerCE.4.0"/>

作为连接字符串。

我将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 应该可以在任何服务器上运行而无需安装。

4

6 回答 6

31

I don't like to respond to my own answer, but after hours of work I have the answer!

We need:

NuGet (Better than copying the dll's from program file)

With NuGet we install:

EFCodeFirst

SqlServerCompact

EFCodeFirst.SqlServerCompact

The problem was that EF need another dll for SQL CE 4 (System.Data.SqlServerCe.Entity.dll) and we need to put some configuration on 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>

With that, all is working. I have seen like 5 different errors, so we need:

The 2 dll from SQL CE 4, the EF dll, the config in web.config and the native dll (from the package directory where NuGet downloads the library).

It seems that the web.config config is pointing to a concrete version of the SQL CE .dll and the version of the RTM package is different. I can't find the concrete version so I use the .dll from NuGet.

That's all, SQL CE 4 + EF on a remote host.

于 2011-02-04T23:04:17.187 回答
21

Just use menu "Project/Add Deployable Dependencies..." I'm not sure if it is Visual Studio 2010 SP 1 only.

于 2011-03-25T10:03:57.940 回答
4

您需要确保在您的私有应用程序目录(例如 \bin)中除了托管一个之外还有本机 SQL CE 4.0 dll。

从“C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Private\amd64”(或 x86,如果您有 32 位应用程序)复制它们。

部署 MSVCR90.dll 也是明智之举,它也是清单文件。查看 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0 中的文档,了解有关所需 DLL 和重新分发的更多信息。

于 2011-01-31T13:37:02.517 回答
2

这看起来是由在项目中留下多个中间数据位引起的问题,您在没有清理的情况下替换了包含的文件。

我建议执行 Build->Clean all,然后确保所有引用都指向新的、正确的 DLL,然后确保项目中的任何地方都没有旧文件或引用。完成后尝试重建。

由于这是一个 hello world 项目,因此从头开始创建一个新项目并在其中包含正确的 dll 可能会更容易。

于 2011-01-31T01:35:12.003 回答
1

我遇到了同样的问题。尝试在我的 goDaddy 帐户上使用代码优先的 SQL CE 4.0 应用程序。

我开始根据上面的线程和其他教程处理各种 DLL 文件,但似乎没有任何效果。有什么东西不见了。然后我读到了Add Deployable Dependencies响应。

我这样做了,它创建了 _bin_deployableAssemblies 文件夹。然后我从 bin 文件夹中删除了除核心项目的 DLL 之外的所有内容,并将 _bin_deployableAssemblies 中的所有内容复制到 bin 文件夹中。

我清理了 goDaddy 应用程序 bin 文件夹中的所有内容并重新同步了文件。那行得通。应用程序加载,如果我对类进行 codefirst 更改,dbcontext 会为我重新创建数据库。当然,我不希望在生产中这样做,但我想知道一切正常。

我确实尝试使用关于将 MVC 应用程序部署到托管环境的 ASP 教程(他们使用 Cytanium 托管作为他们的示例),但它在 GoDaddy 上对我不起作用。我不得不手动复制文件。

谢谢大家。这对我来说是一个巨大的进步,让我能够轻松地继续使用 MVC 和 EF。

于 2012-05-03T12:47:08.350 回答
1

尝试手动安装 SQL CE。

http://www.microsoft.com/download/en/details.aspx?id=17876

祝你好运。

于 2011-09-21T03:10:05.720 回答