c# - GUID 字段的查询对 Entity Framework 和 Oracle 不起作用

标签 c# oracle entity-framework-5

我有最新版本的 Oracle 数据访问组件 (ODAC) (12.1.0.1.0),我首先将它与 EF 5 数据库一起使用。

在我的数据数据库中,我有一个 RAW(16) 类型的字段 当数据保存到数据库中时,格式为大写,没有任何破折号(例如:A0D8F7E720DDBF4296C932F7A730A635)。

我尝试在此 GUID 字段上使用 where 子句查询实体,但无法获得任何结果。我们的 where 子句看起来像这样 (C#)

Context.Users.where(x=>x.GuidField == anotherGuid);

两个变量都是 GUID 类型。

字段 GuidField 在数据库中是 RAW(16) 但 Entity Framework 将其映射为 GUID

任何人都有任何想法。

提前致谢

最佳答案

看来是oracle驱动或者ev的问题。 EF 如何传递 Guid 参数。当您比较两个 Guid(一个来自 Oracle DB 的 raw(16),一个在您的程序中的 Guid)时,问题出现在 where 条件中。当您的实体将 raw(16) 作为主键时,它也会出现在 Find() 操作中。

经过几个小时的浪费,我发现了以下临时解决方法: 制作一个 Guid 列表,添加您要搜索的 Guid,然后使用 list.Contains() 进行比较。似乎在这种特殊情况下,比较不是在数据库服务器上的 Oracle where 条件中完成的,而是在您的 .Net 程序中完成的。至少它给出了预期的结果。

例如

List<Guid> searchList = new List<Guid>();
searchList.Add(anotherGuid);
Context.Users.where(x => searchList.Contains(x.GuidField) );

关于c# - GUID 字段的查询对 Entity Framework 和 Oracle 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23666427/

相关文章:

entity-framework-5 - 忽略 OnModelCreating 中的属性

Oracle PL/SQL 匿名 block 从两个表检索数据(NOVA 环境)

entity-framework - 使用 TPH 和复杂类型时,LINQ to Entities 的初始性能问题,Pregen Views 似乎什么都不做?

c# - 我怎样才能创建一个 WPF 样式,以便所有图像控件上都有一个 MouseDown(click) 事件?

c# - 如何检查正在运行的进程是否为后台进程?

sql - 使用纯 Oracle SQL 的任何更好的 Fibonacci 系列生成器?

java - 连接未关闭

c# - Entity Framework 5.0 的数据注释(数据库优先)

c# - .NET v4.7 中不存在 TLS1.2

c# - 如何根据行背景颜色对datagridview进行排序?