概要
本文有关此热修复程序版本的介绍如下 ︰
-
通过此修补程序包修复的问题
-
安装此修复程序包的先决条件
-
安装此修补程序包后是否必须重新启动计算机
-
是否有修补程序包被任何其他修补程序软件包所替换
-
是否必须更改注册表
-
此修复程序包中包含的文件。
症状
请考虑以下情形。应用程序使用 Microsoft ADO.NET 实体框架包含在 Microsoft.NET Framework 3.5 的 Service Pack 1 访问 Microsoft SQL Server Compact 3.5 数据库。在应用程序中,您可以运行使用一个字符串参数或二进制参数对数据库的"LINQ to Entities"查询。在这种情况下,当您运行应用程序时收到以下错误消息︰
其中,HAVING、 GROUP BY,开或子句时这些数据类型使用类似, 除外或是空谓词中,不使用 ntext 和图像数据类型。
原因
为"LINQ to Entities"查询应用程序中使用参数时,不能指定基本数据库类型。SQL Server Compact 实体框架提供程序尝试创建提供程序级参数根据原始参数的实体数据模型 (EDM) 各个方面。SQL Server Compact 不支持nvarchar(max)数据类型或varbinary(max)数据类型。因此,当该提供程序选择数据类型参数或Edm.Binary数据类型Edm.String数据类型的则提供程序必须将该参数标记为基于参数的 EDM 各个方面以下数据类型之一︰
-
为一个字符串参数,该提供程序选择nvarchar(4000)数据类型或ntext数据类型。
-
对于二进制的参数,提供程序将选择varbinary(4000)数据类型或图像数据类型。
如果提供程序标记为nvarchar(4000)数据类型或varbinary(4000)数据类型的参数,当您尝试插入大于 8000 个字节的值,就会出错。 此外,如果该提供程序将标记作为ntext数据类型或图像数据类型参数,如果在参数上正在执行任何相等运算、 分组操作或排序操作发生错误。
解决方案
修补程序信息
可以从 Microsoft 获得受支持的修复程序。然而,此修补程序仅用于解决本文中描述的问题。此修复程序仅适用于遇到本文中描述的问题的系统。此修补程序可能会接受进一步的测试。因此,如果这个问题没有对您造成严重的影响,我们建议您等待包含此修复程序的下一个软件更新。
如果此修复程序可供下载,则在此知识库文章的顶部会出现“修补程序下载可用”部分。如果未显示此部分,请与 Microsoft 客户服务和支持部门联系以获取此修复程序。
注意:如果出现其他问题或需要任何故障诊断时,您可能需要创建单独的服务请求。对于不符合此特定的修补程序的其他支持问题和事项将照常收取费用。有关 Microsoft 客户服务和支持电话号码或创建单独的服务请求的完整列表,请访问下面的 Microsoft 网站︰
http://support.microsoft.com/contactus/?ws=support注意:"提供修补程序下载"窗体显示获取此修复程序的语言。如果看不到您的语言,则修补程序没有那种语言的版本。
系统必备组件
若要应用此修补程序,您必须卸载以前安装的 SQL Server Compact 3.5 Service Pack 1 安装此修补程序提供的.msi 文件。如果不卸载以前安装的 SQL Server Compact 3.5 Service Pack 1,您会收到错误消息,表明已安装了较新版本的 SQL Server Compact。有关 SQL Server Compact 3.5 Service Pack 1 的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰
SQL Server Compact 3.5 版 Service Pack 1 的955965说明
重新启动信息
应用此修补程序后,不需要重新启动计算机。
注册表信息
您不需要更改注册表。
修补程序文件信息
此修补程序仅包含解决本文列出的问题所需的那些文件。此修复程序可能不包含所有文件必须包含将产品完全更新到最新版本。
此修复程序的英文版具有的文件属性 (或更新的文件属性)在下表中列出。日期和为这些文件的时间以协调世界时 (UTC) 列出。当您查看文件信息时,它将转换为本地时间。要了解 UTC 与本地时间之间的时差,请使用控制面板中的日期和时间项中的时区选项卡。
文件名称 |
文件版本 |
文件大小 |
日期 |
时间 |
平台 |
---|---|---|---|---|---|
System.data.sqlserverce.entity.dll |
3.5.5692.1 |
230,480 |
24-Sep-2008 |
06:46 |
x86/x64/IA-64 |
System.data.sqlserverce.dll |
3.5.5692.1 |
271,440 |
24-Sep-2008 |
06:46 |
x86/x64 |
Policy.3.5.system.data.sqlserverce.dll |
3.5.5692.1 |
13,392 |
24-Sep-2008 |
06:46 |
x86/x64 |
Policy.3.5.system.data.sqlserverce.entity.dll |
3.5.5692.1 |
13,392 |
24-Sep-2008 |
06:46 |
x86/x64 |
Sqlceca35.dll |
3.5.5692.1 |
343,104 |
24-Sep-2008 |
08:07 |
x86 |
Sqlcecompact35.dll |
3.5.5692.1 |
84,544 |
24-Sep-2008 |
08:07 |
x86 |
Sqlceer35en.dll |
3.5.5692.1 |
148,032 |
24-Sep-2008 |
08:07 |
x86 |
Sqlceme35.dll |
3.5.5692.1 |
65,088 |
24-Sep-2008 |
08:07 |
x86 |
Sqlceoledb35.dll |
3.5.5692.1 |
172,608 |
24-Sep-2008 |
08:07 |
x86 |
Sqlceqp35.dll |
3.5.5692.1 |
644,160 |
24-Sep-2008 |
08:07 |
x86 |
Sqlcese35.dll |
3.5.5692.1 |
348,224 |
24-Sep-2008 |
08:07 |
x86 |
状态
Microsoft 已经确认这是“适用于”一节中列出的 Microsoft 产品中的问题。
详细信息
应用此修补程序之后,提供程序不猜测切割参数的数据类型。字符串数据类型或EDM。二进制数据类型。查询处理器选择正确的数据类型参数基于值或向其赋值的参数或该参数使用的列。
例如,在下面的实体 SQL 查询中,查询处理器将选择name参数ntext数据类型然后再应用此修补程序。
String name = "XYZ";var q = from e in nwind.Employees
where e.First_Name = name
select e;
应用此修补程序后,名列中的数据类型为name参数选择。
然而,在下面的示例中,"LINQ 到实体"查询失败因为name参数不等同于也不与任何其他的值或列一起使用。
String name = "XYZ";var q = from e in nwind.Employees
select name;
此修补程序还解决了一个已知的问题是按照 SQL Server Compact 3.5 自述文档。 有关详细信息,请参阅"SQL Server Compact 3.5 SP1 运行时问题的 ADO.NET 实体框架"部分中的下列 Microsoft Web 站点︰
http://download.microsoft.com/download/2/e/c/2ec70436-aef2-4ccb-93a3-ea2f3e20f77d/ReadmeSSC35.htm此修补程序解决的问题,都与不正确时,提供程序将转换应用构造的标量子查询生成的事务处理 SQL 语句。
注意:相关子查询内部转换为标量的子查询。在此版本中不支持相关子查询。当您运行这些查询时,您会收到以下错误消息︰
执行命令定义时出错。请参阅内部异常以了解详细信息。
内部异常包含以下消息︰
分析查询时出错。[..,标记错误 = AS]
原因是 ADO.NET 实体框架会将输入的查询解释为具有跨应用联接类型或外部应用联接类型的查询。如果连接条件的右侧返回一个标量值,则联接将被转换为标量子查询。ADO.NET 实体框架提供有关 SQL Server Compact 已将该标量子查询转换为等效的查询具有外部应用联接类型,该类型由 SQL Server Compact 支持。但是,在此版本中,不正确地进行这种转换。例如,以下查询在此版本中发生错误。
C# Sample Application:using (NorthwindEntities nwEntities = new NorthwindEntities())
{
var orders = nwEntities.Employees
.Select(employee => employee.Orders.Max(order => order.Order_ID));
foreach (var order in orders)
{
Console.WriteLine(order.ToString());
}
}
有关命名 SQL Server 更新架构的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章︰
822499新命名方案为 Microsoft SQL Server 软件更新程序包
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
用于描述 Microsoft 软件更新的标准术语的824684说明