Get DateTime as UTC with Dapper

前端 未结 4 1629
醉梦人生
醉梦人生 2020-12-04 15:23

I\'m using Dapper to map my entities to SQL Server CE. If I save a DateTime with Kind=Utc, when I read it back I get a DateTime with <

4条回答
  •  囚心锁ツ
    2020-12-04 16:05

    Looked into the Dapper code. Unless mine was out of date, for value types like datetime (which is mapped to DbType.DateTime), dapper just does a simple cast from the IDataReader object.

    Pseudo : yield return (DateTime)IDataReader.GetValue(0);

    That's the specific case for Datetime out of a bunch of generic code and lambdas.

    AFAIK, SQL datetime never stores the offset / timezone so the kind will always say "Unspecified" on any datetime you store and fetch.

    So, to do it cleanly, you could touch dapper internals:

    which is a pain as you'd have to touch a big IL generating method (the DataRow Deserializer) and put in an if case for DateTime.

    OR

    just put a setter on the DateTime props where UTC is an issue (which is kinda against POCO but is relatively sane):

    class Foo
    {
        private DateTime _modificationDate;
        public DateTime ModificationDate
        {
            get { return _modificationDate; }
            set { _modificationDate = DateTime.SpecifyKind(value, DateTimeKind.Utc); }
        }
        //Ifs optional? since it's always going to be a UTC date, and any DB call will return unspecified anyways
    }
    

提交回复
热议问题