gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:19:17 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com