Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ODP.NET/EF6-WHERE子句中的字符数据类型_C#_Oracle_Entity Framework_Odp.net - Fatal编程技术网

C# ODP.NET/EF6-WHERE子句中的字符数据类型

C# ODP.NET/EF6-WHERE子句中的字符数据类型,c#,oracle,entity-framework,odp.net,C#,Oracle,Entity Framework,Odp.net,我正在使用EF6和ODP.NET启动一个项目,在执行基于固定长度字符列的查找时遇到问题 以下代码不返回任何结果,即使数据库中存在此用户 using (var context = new Entities()) { var search = "testuser"; var result = context.Users .Where(u => u.UserName == search) .FirstOrDefault

我正在使用EF6和ODP.NET启动一个项目,在执行基于固定长度字符列的查找时遇到问题

以下代码不返回任何结果,即使数据库中存在此用户

using (var context = new Entities())
 {
   var search = "testuser";
   var result = context.Users
                .Where(u => u.UserName == search)
                .FirstOrDefault();
  }
我知道我可以通过填充搜索字符串或修剪数据库列来解决这个问题,但我正在寻找另一种解决方案

我注意到,如果直接使用OracleConnection/OracleCommand执行查询,那么它就会工作。是否有一个属性或任何我可以添加到entity类的内容,以使ODP.NET将变量绑定为OracleDbType.Char

基本上,我正在寻找一种从EF6复制以下行为的方法:

var cmd = new OracleCommand("SELECT * FROM users WHERE user_name = :p0", conn);
cmd.Parameters.Add(":p0", OracleDbType.Char).Value = "testuser";
我还使用Devart的dotConnect Oracle驱动程序进行了测试。使用该驱动程序,我可以通过添加以下代码行成功地进行查找。不过,我更愿意使用ODP.NET而不是dotConnect。ODP.NET似乎忽略了此属性,因为它在使用ODP.NET时没有任何效果。ODP.NET是否会认识到与此类似的问题

modelBuilder.Entity<Users>()
            .Property(u => u.UserName
            .IsFixedLength();
modelBuilder.Entity()
.Property(u=>u.UserName
.IsFixedLength();

如果可以的话,我只想将列类型更改为VARCHAR2,不再使用它,但不幸的是,这目前不是一个选项。非常感谢您提供的任何帮助!

将Oracle命令替换为

SELECT * FROM users WHERE cast(user_name as varchar2(20)) = :p0

您可以使用CAST将Oracle中的大多数数据类型转换为大多数其他数据类型。CHAR数据类型很难使用(由于某种原因不推荐使用)并将其转换为varchar2(xx)是最好的选择。

你能找出你的LINQ语句生成的sql是什么吗。如果它与我遇到的问题类似,sql将如下所示:
选择“Extent1”。“USERNAME”作为“USERNAME”,从“USERS”“Extent1”中(“Extent1”。“USERNAME”=:p_LINQ_u0)和(ROWNUM我前面评论中的SQL是使用以下modelBuilder配置生成的:
modelBuilder.Entity().Property(u=>u.UserName).IsFixedLength().HasMaxLength(10).HasColumnType(“CHAR”).IsUnicode(false);