Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
.net 数据访问层程序集引用链_.net_Entity Framework_Sql Server Ce_Data Access Layer - Fatal编程技术网

.net 数据访问层程序集引用链

.net 数据访问层程序集引用链,.net,entity-framework,sql-server-ce,data-access-layer,.net,Entity Framework,Sql Server Ce,Data Access Layer,我有一个DataAccess程序集,它引用SQL Server Compact DLL 在我的主应用程序中,我只添加了对DataAccess程序集的引用。我希望我的主应用程序不要在内部引用DataAccess引用的任何dll,特别是对SQL Server Compact程序集的引用,这样,如果我更改为其他提供程序,我就不必更改主项目中的引用或更新app.config配置 顺便说一下,在运行时,我得到以下错误: 未找到具有固定名称“System.Data.SqlClient”的ADO.NET提供程

我有一个DataAccess程序集,它引用SQL Server Compact DLL

在我的主应用程序中,我只添加了对DataAccess程序集的引用。我希望我的主应用程序不要在内部引用DataAccess引用的任何dll,特别是对SQL Server Compact程序集的引用,这样,如果我更改为其他提供程序,我就不必更改主项目中的引用或更新
app.config
配置

顺便说一下,在运行时,我得到以下错误:

未找到具有固定名称“System.Data.SqlClient”的ADO.NET提供程序的实体框架提供程序。
确保提供程序已在应用程序配置文件的“entityFramework”部分注册。
有关更多信息,请参阅

如果我直接添加对SQLServerCompact的引用,一切正常,但我认为我不应该这样做

如果我将DataAccess使用的所有DLL复制到主应用程序输出文件夹中,一切正常,但DLL不应该自动复制吗

处理此问题的正确方法是什么?

在您的解决方案中:

  • 查找DataAccess项目
  • 展开此项目的“引用”节点
  • 在引用列表中查找SqlServerCompact
  • 右键单击它
  • 将“复制本地”从False更改为True
更新

我能重现你的问题。在我看来,这背后的一个原因是,在DataAccess项目中,您并没有直接使用SQL Server Compact assembly中的类。在这种情况下,生成引擎会尝试智能化,不会复制“未使用”的程序集。但是,它只考虑源代码而不考虑配置。关于这个问题有很多值得一读的东西。建议的解决方案是添加一个直接使用SQLServerCompactAssembly的伪代码。此代码(放置在DataAccess项目中的某个位置)应适用于:

var t = typeof (System.Data.Entity.SqlServerCompact.SqlCeFunctions)

对于EntityFramework、EntityFramework.SqlServer和EntityFramework.SqlServerCompact,它已设置为true。我用的是nuget,谢谢!我发现了和你在更新中写的一样的东西,所以我相信问题就在于此。顺便说一下,我不喜欢虚拟代码解决方案。我正在研究使DataAccess不可知的可能性,并从主应用程序app.config配置要使用的提供程序。你认为这可能吗?为了测试这种可能性,我正在尝试在不接触DataAccess程序集的情况下从主应用程序SqlServerCe切换到SqlLite,并使其正常工作。任何比伪代码更好的解决方案的进一步帮助都是非常值得的。