- 3,715,657 Users
- 2,242,821 Discussions
- 7,845,481 Comments
Forum Stats
Discussions
Categories
- 17 Data
- 362.2K Big Data Appliance
- 7 Data Science
- 1.6K Databases
- 467 General Database Discussions
- 3.7K Java and JavaScript in the Database
- 22 Multilingual Engine
- 487 MySQL Community Space
- 3 NoSQL Database
- 7.6K Oracle Database Express Edition (XE)
- 2.8K ORDS, SODA & JSON in the Database
- 416 SQLcl
- 42 SQL Developer Data Modeler
- 184.8K SQL & PL/SQL
- 21K SQL Developer
- 1.9K Development
- 3 Developer Projects
- 32 Programming Languages
- 135.1K Development Tools
- 8 DevOps
- 3K QA/Testing
- 247 Java
- 5 Java Learning Subscription
- 10 Database Connectivity
- 66 Java Community Process
- 1 Java 25
- 9 Java APIs
- 141.1K Java Development Tools
- 6 Java EE (Java Enterprise Edition)
- 153K Java Essentials
- 135 Java 8 Questions
- 86.2K Java Programming
- 270 Java Lambda MOOC
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 10 Java SE
- 13.8K Java Security
- 3 Java User Groups
- 22 JavaScript - Nashorn
- 18 Programs
- 125 LiveLabs
- 30 Workshops
- 9 Software
- 3 Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 3 Deutsche Oracle Community
- 10 Español
- 1.9K Japanese
- 2 Portuguese
dotnet ef dbcontext scaffold: Bug in oracle to C# datatype mapping?
Hello,
i'm having a hard time to understand the mapping of Oracle datatypes to C# datatypes:
"Actual" is the result in my generated C# Class while "Expected" would be the more comprehensible result from my perspective.
create table Demo( level NUMBER(1) not null, -- Actual: bool Expected: int algorithm NUMBER(1) default 1, -- Actual: bool? Expected: int? manipulate_events NUMBER(1) default 0, -- Actual: bool? Expected: int? disabled NUMBER(10) default 0, -- Actual: int? Expected: int? tp NUMBER(10), -- Actual: int? Expected: int? divisor NUMBER, -- Actual: decimal? Expected: decimal? matrix_x NUMBER(3), -- Actual: byte? Expected: int?)
Could you eleborate a bit why you choose such a mapping or kindly consider changing it within the next service release?
Tooling:
Oracle.EntityFrameworkCore Version 2.19.60
Microsoft.EntityFrameworkCore Version 2.2.6
Microsoft.EntityFrameworkCore.Relational Version 2.2.6
Microsoft.EntityFrameworkCore.Design Version 2.2.6
Microsoft.EntityFrameworkCore.Tools Version 2.2.6
Kind Regards
a frustrated user of your products
Best Answer
-
The "Actual" is consistent with what ODP.NET EF Core documents: https://docs.oracle.com/en/database/oracle/oracle-data-access-components/19.3/odpnt/EFCoreREDataTypeMapping.html#GUID-4F…
The reason for the mapping choices is that the EF Core provider model only allows provider writers, such as Oracle and MySQL, to have one set of default data type mapping. That one mapping has to work with both scaffolding and migrations. When .NET data type sizes do not map one to one with the DB data types, the provider writer has to decide whether to map so that inserts work without error or retrievals. Microsoft has advised Oracle to favor DB inserts in its EF provider, which makes sense. It's generally easier to modify the app than the DB schema.
If EF Core allows provider writers to define different mappings for scaffolding and for migrations, Oracle could then provide a more natural default data type mapping for scaffolding.
Until then, these mappings are only a default setting. Developers can change the mapping manually to whatever data type they prefer to use.
Answers
-
The "Actual" is consistent with what ODP.NET EF Core documents: https://docs.oracle.com/en/database/oracle/oracle-data-access-components/19.3/odpnt/EFCoreREDataTypeMapping.html#GUID-4F…
The reason for the mapping choices is that the EF Core provider model only allows provider writers, such as Oracle and MySQL, to have one set of default data type mapping. That one mapping has to work with both scaffolding and migrations. When .NET data type sizes do not map one to one with the DB data types, the provider writer has to decide whether to map so that inserts work without error or retrievals. Microsoft has advised Oracle to favor DB inserts in its EF provider, which makes sense. It's generally easier to modify the app than the DB schema.
If EF Core allows provider writers to define different mappings for scaffolding and for migrations, Oracle could then provide a more natural default data type mapping for scaffolding.
Until then, these mappings are only a default setting. Developers can change the mapping manually to whatever data type they prefer to use.