Entity Linq function Contains() generates incomplete SQL query when using NUMBER(20) mapped to Decimal
Posted: Mon 15 Jun 2015 13:25
How to reproduce:
DATABASE script:
Code C#:
When executed, DBMonitor shows only 2 values (with high distance and result respectively wrong ):
Note that when using 14 actual digits (6 MSB digits zero) startId = 00000078901234567890M, the SQL result is fine.
Using
DotConnect for Oracle v8.4.379
Entity Framework v6 (6.1.2)
Oracle Database 11g (Same issue on 12c)
Instant Client v11
DATABASE script:
Code: Select all
CREATE TABLE MYMODEL.TESTIDS (
ID NUMBER(20) NOT NULL,
NAME VARCHAR2(6 CHAR) NULL,
CONSTRAINT PK_TESTIDS PRIMARY KEY (ID)
);
Code: Select all
var idlist = new List<decimal>();
decimal startId = 12345678901234567890M; //(20digits)
for (decimal i = 0; i < 1200; i++)
idlist.Add(startId + i);
using ( DbContext ctx = MyModel.GetNewContext())
{
var resultq = ctx.Set<TESTIDS>().Where(x => idlist.Contains(x.ID));
var result = resultq.ToList();
}Code: Select all
SELECT
"Extent1".ID,
"Extent1".NAME
FROM TACTICAL.TESTIDS "Extent1"
WHERE ("Extent1".ID IN (12345678901234567890)) OR ("Extent1".ID IN (12345678901234568402))Using
DotConnect for Oracle v8.4.379
Entity Framework v6 (6.1.2)
Oracle Database 11g (Same issue on 12c)
Instant Client v11