Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework SQLCE4.0+;EF 5.0在VS2012中停止工作_Entity Framework_Visual Studio 2012_Sql Server Ce - Fatal编程技术网

Entity framework SQLCE4.0+;EF 5.0在VS2012中停止工作

Entity framework SQLCE4.0+;EF 5.0在VS2012中停止工作,entity-framework,visual-studio-2012,sql-server-ce,Entity Framework,Visual Studio 2012,Sql Server Ce,我已经创建了一个几乎可以分发给客户端的应用程序。这花了我几个月的时间。一切正常,但随后我安装了VS2012,所有测试都停止工作。我尝试了一切,但最终还是放弃了,重新安装了我的整个电脑 和以前一样的设置,但是一切都很干净:Windows7 64位、VS2012、SQL2012等等。现在所有的测试都很好,所以我很高兴。但现在我遇到了新的麻烦。以SqlCe 4.0为目标时,它不起作用。我的应用程序将通过WinApi与中央SQL Server同步。这一部分还可以,但是使用SQLCE4.0的本地数据库无法

我已经创建了一个几乎可以分发给客户端的应用程序。这花了我几个月的时间。一切正常,但随后我安装了VS2012,所有测试都停止工作。我尝试了一切,但最终还是放弃了,重新安装了我的整个电脑

和以前一样的设置,但是一切都很干净:Windows7 64位、VS2012、SQL2012等等。现在所有的测试都很好,所以我很高兴。但现在我遇到了新的麻烦。以SqlCe 4.0为目标时,它不起作用。我的应用程序将通过WinApi与中央SQL Server同步。这一部分还可以,但是使用SQLCE4.0的本地数据库无法工作。有什么问题?这是一台全新的干净电脑

我用基本设置创建了一个新的解决方案:Nuget安装的SqlCe Compact,Entity Framework 5,代码优先,一个类,一个上下文。它不起作用!它在对数据库的第一次上下文调用时被卡住,并且数据库文件未生成。也不例外,只是卡住了


发生了什么事?SqlCe不可靠吗?我应该切换到SQLite吗?问题是我有很多代码,而且我非常习惯EF。

我搜索时没有找到与我的案例完全匹配的答案。但是我在一个博客上得到了一个主意,提到machine.config文件中的一个格式错误的标记。在查看时,我发现了这一非常关键的部分:

  <system.data>
    <DbProviderFactories>
      <add name="Odbc Data Provider" invariant="System.Data.Odbc" description=".Net Framework Data Provider for Odbc" type="System.Data.Odbc.OdbcFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="OleDb Data Provider" invariant="System.Data.OleDb" description=".Net Framework Data Provider for OleDb" type="System.Data.OleDb.OleDbFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="OracleClient Data Provider" invariant="System.Data.OracleClient" description=".Net Framework Data Provider for Oracle" type="System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <add name="SqlClient Data Provider" invariant="System.Data.SqlClient" description=".Net Framework Data Provider for SqlServer" type="System.Data.SqlClient.SqlClientFactory, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      <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"/>
      <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.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
  </system.data>

在我的machine.config文件中,dbProviderFactorys部分为空。我试图添加它,但无法添加,因为它已被某个应用程序锁定。另一方面,我的客户可能会遇到同样的问题,我很难让他们编辑machine.config。所以我用了一种简单的方法:将该部分添加到我的应用程序配置文件中!瞧!一切都恢复正常了。我的应用程序再次运行良好


但是为什么它在我以前的Windows安装中起作用呢?为什么不总是将此部分添加到machine.config?为什么在结合EntityFramework 5.0的SqlCe 4.0上的演示示例中,DBProviderFactorys从未作为先决条件被提及?这可能只是.Net Framework 4.5中的一个问题吗?

安装NuGet软件包不会在machine.config中注册任何内容,您必须在自己的配置文件中删除/添加提供程序,或者在用户计算机上安装4.0 MSI文件。EF示例始终假定安装了MSI

示例配置条目:

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


谢谢,我一定会采纳你的建议。但为什么这么复杂?SqlCe 4是否不适用于客户端安装?难道它不应该与刚刚开箱的ClickOnce一起工作吗?还是我遗漏了什么?我知道微软现在推荐SqlLocalDb,但我真的很喜欢基于文件的简单数据库,它可以很容易地移动。就我而言(~1Mb)的大小和速度都很棒。我只是认为SQLCE4是最好的。SqlLocalDb或SQLCE3.5作为客户端数据库更容易部署吗?SQLCE4是最容易部署的,并且与EF5一起工作