我有一个带有可空int属性的类,出于过滤原因,我需要转换为字符串来进行一些比较。我安装了EF 6.1.2,因此使用.ToString()将适用于此。
queryableData = queryableData.Where(a =>
a.PropName.HasValue && a.PropName.Value.ToString().Contains("8675309"));
在检查正在执行的实际SQL时,该数字正在被CAST转换为NCLOB类型,这会导致以下错误:
ORA-00932:不一致的数据类型:预期的NCHAR - 得到NCLOB
从我读过的内容来看,这是因为Entity在这种情况下并不知道潜在的最大大小,所以它默认为最大的选项。我知道有一个字符串属性,我可以表示最大大小来帮助。在将属性保持为int以防止NCLOB被使用时,我能做些什么吗?或者在防止此异常时使用它们的方法?
其他一些说明:
答案 0 :(得分:1)
我在Oracle( Oracle 11.2.02和Oracle.ManagedDataAccess.12.2.1100 )和实体框架( EntityFramework.6.1.3 )中遇到了同样的问题。< / p>
这内部Linq代码(属性“Id”是整数):
Material.Id.ToString()
生成此SQL:
(CASE WHEN ("Extent3"."Material_Id" IS NULL) THEN N'' ELSE TO_NCLOB("Extent3"."Material_Id") END)
问题是 TO_NCLOB ,它应该是 TO_NCHAR
<强>解决方案强>
JonathanPeel comment
Install-Package EntityFramework.Functions