DapperLib / Dapper

Dapper - a simple object mapper for .Net
https://www.learndapper.com/
Other
17.29k stars 3.67k forks source link

Formatting from DB Date into C# string is not using current culture (Dapper Nugget package 2.1.28) #2054

Open Janis-developer opened 3 months ago

Janis-developer commented 3 months ago

Thx for the cool ORM!

We use legacy code. I upgraded Dapper from 2.0.30 to the Latest (Nugget package 2.1.28)

And now date is formatted to string always without respecting current culture.

With old Dapper version 2.0.30 , when change current culture to "lv-LV" and Query from Oracle, db Date field into C# string field formatted correctly "dd.mm.YYYY".

With Dapper 2.1.28 its always "mm/dd/YYYY" regardless of culture. ( Receiving Date Ok. Yeh, we should keep as C# Date, but that another story - legacy)

mgravell commented 3 months ago

OK, there's a lot of moving parts here; can I clarify:

I'm not aware of this consciously changing at any point, but philosophically:

  1. IMO the library should almost always use culture invariants for storage, so: it is probably correct as described
  2. if you're storing data like dates as strings... maybe don't do that?

Happy to try to dig a bit more, but: some of this seems like a usage/database-design issue.

An end-to-end example would be helpful, obviously.

Janis-developer commented 3 months ago

Hello,

The issue happens when received value gets converted from DateTime object into C# string. It seems to use hardcoded format.

var result = oracleConnection(query, parameters);

class Client { public string name { get; set; } public string date_of_birth { get; set; } // all are strings ... }

Yes, like I wrote before, it should be kept as C# DateTime, but its legacy.

In DB its DATE type. The reading works fine.

For now I reverted back to old Dapper - it formats DateTime to string taking current culture into consideration.

mgravell commented 3 months ago

ok, so the data in the database is typed as a date (whatever the relevant type is in Oracle), and is stored correctly - is that right?