我有最新版本的 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/