Tuesday, March 6, 2012

Bug: Using TimeStamp with Time Zone in (Oracle) Entity Framework

For the past week I have been working on the problem of correctly saving TimeStamp with Time Zone in (Oracle) Entity Framework. The problem is both DateTime and OffsetDateTime when saved in that field in the DB are missing a critical info – the location offset given to them. They always save the field with the offset of the client, in my case +02:00.

In the beginning I was sure it was something that will be easily fixed, simply because I came through this StackOverFlow question/answer which talked about changing the numeric data type so that bool is number(1,0). So I was sure it was a generic interface, well its not!

Looking into Oracle’s EFOracleProviderServices decompiled source (using JetBrains’s dotPeek) I tried looking for config values but instead found the bug in Oracle:

  1. new OracleParameter(name, (object) ((DateTimeOffset) value).DateTime))

Meaning that although you might have gone into the trouble of creating a DateTimeOffset (with no trouble at all), Oracle just knows what’s best and will convert it to DateTime (plus enable a boolean that will later convert it back to offset).

I have tried using Open Source Providers but so far no luck (had problem finding the provider or it wasn’t in .net 4.0), I will try again tomorrow.

http://eforacleodpprovider.codeplex.com

http://archive.msdn.microsoft.com/EFOracleProvider/Release/ProjectReleases.aspx?ReleaseId=1395

//TODO: Continue this

 

Resources:

StackOverFlow: Where do I put Oracle EntityFramework Mapping settings for LinqPad?