I have a problem returning data from an Oracle database using the WHERE clause that is for the CHAR column.
I presented the steps below that should allow you to recreate the problem:
Database setup
Run the following SQL to create the database table and insert the data layout:
CREATE TABLE ORDERS (ORDER_NUMBER CHAR(10 BYTE));
INSERT INTO ORDERS VALUES ('123456');
SELECT REPLACE(ORDER_NUMBER, ' ', '#') as ORDER_NUMBER from ORDERS
ORDER_NUMBER
123456 ####
As you can see, the value stored in the table is filled with spaces up to 10 characters (replaced with "#" to make them visible).
Entity Platform Configuration
public class Order
{
public string OrderNumber { get; set; }
}
public class OrderMap : EntityTypeConfiguration<Order>
{
public OrderMap()
{
HasKey(t => t.OrderNumber);
Property(t => t.OrderNumber)
.HasColumnName("ORDER_NUMBER")
.IsRequired()
.IsFixedLength()
.HasMaxLength(10)
.HasColumnType("CHAR")
.IsUnicode(false);
}
}
public class OrdersContext()
{
static OrdersContext()
{
Database.SetInitializer<OrderContext>(null);
}
public DbSet<Order> Orders { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new OrderMap());
}
}
Problem
class Program
{
static void Main(string[] args)
{
using (var context = new OrdersContext())
{
var order1 = context.Orders
.FirstOrDefault(o => o.OrderNumber == "123456");
Debug.WriteLine("OrderNumber:" + order1.WorksOrder);
var orderFilter = "123456";
var order2 = context.Orders
.FirstOrDefault(o => o.WorksOrder == orderFilter);
Debug.WriteLine("OrderNumber:" + order2.WorksOrder);
}
}
}
, , (orderFilter), . , orderFilter , , :
var orderFilter = "123456".PadRight(10);
var order2 = context.Orders.FirstOrDefault(o => o.WorksOrder == orderFilter);
Debug.WriteLine("OrderNumber:" + order2.WorksOrder);
, SQL, , . , SQL:
22/04/2015 12:15:12 +01: 00
SELECT "Extent1" . "ORDER_NUMBER" AS "ORDER_NUMBER" , FROM "ORDERS" "Extent1" WHERE ( "Extent1" . "ORDER_NUMBER" =: p__linq__0) AND (ROWNUM <= (1))
- p__linq__0: '123456' (Type = Object)
- 22/04/2015 12:15:12 +01: 00 - 13 : OracleDataReader
DbFunctions.AsNonUnicode(orderFilter), , , .
- , ? CHAR ?
.
, :
:
- Entity Framework 6.1.3
- .Net Framework 4.5.1
- Oracle.ManagedDataAccess 4.121.2.0 ODAC 12c Release 3
- Oracle.ManagedDataAccess.EntityFramework 6.121.2.0
- Oracle - 11.2.0.3.0