「Fluent NHibernate/フルーエントマッピング/日付型」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
(ページの作成:「Fluent NHibernateMySQLの組み合わせでは、C#のDateTimeやTimeSpanなどの日付型においてミリ秒以下が落ちる。 これはM...」)
 
imported>Administrator
1行目: 1行目:
 
[[Fluent NHibernate]]と[[MySQL]]の組み合わせでは、[[C Sharp|C#]]のDateTimeやTimeSpanなどの日付型においてミリ秒以下が落ちる。
 
[[Fluent NHibernate]]と[[MySQL]]の組み合わせでは、[[C Sharp|C#]]のDateTimeやTimeSpanなどの日付型においてミリ秒以下が落ちる。
  
これはMySQL側の仕様の問題で、MySQLのDATETIME型およびTIMESPAMP型が秒単位の精度までであることに起因する。
+
これはMySQL側の仕様の問題で、MySQLのDATETIME型およびTIMESPAMP型が秒単位の精度までであることに起因するようだ。
  
 
== エンティティ ==
 
== エンティティ ==
 +
<source lang="csharp">
 
public class TimeSpace
 
public class TimeSpace
 
{
 
{
10行目: 11行目:
 
     public virtual TimeSpan TimeSpan { get; set; }
 
     public virtual TimeSpan TimeSpan { get; set; }
 
}
 
}
 +
</source>
  
 
== マッピング ==
 
== マッピング ==
 +
<source lang="csharp">
 
public class TimeSpaceMap : ClassMap<TimeSpace>
 
public class TimeSpaceMap : ClassMap<TimeSpace>
 
{
 
{
23行目: 26行目:
 
     }
 
     }
 
}
 
}
 +
</source>
  
 
== スキーマ ==
 
== スキーマ ==

2012年7月8日 (日) 10:05時点における版

Fluent NHibernateMySQLの組み合わせでは、C#のDateTimeやTimeSpanなどの日付型においてミリ秒以下が落ちる。

これはMySQL側の仕様の問題で、MySQLのDATETIME型およびTIMESPAMP型が秒単位の精度までであることに起因するようだ。

エンティティ

public class TimeSpace
{
    public virtual long Id { get; protected set; }
    public virtual DateTime DateTime { get; set; }
    public virtual TimeSpan TimeSpan { get; set; }
}

マッピング

public class TimeSpaceMap : ClassMap<TimeSpace>
{
    public TimeSpaceMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();

        Map(x => x.DateTime);

        Map(x => x.TimeSpan);
    }
}

スキーマ

C#側のDateTime型はMySQL側のDATETIME型にマッピングされている。 一方、C#側のTimeSpan型はMySQL側のBIGINT型にマッピングされている。

CREATE TABLE TimeSpace (
  Id bigint(20) NOT NULL AUTO_INCREMENT,
  DateTime datetime DEFAULT NULL,
  TimeSpan bigint(20) DEFAULT NULL,
  PRIMARY KEY (Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

解決策

知らん。


関連項目

参考文献


外部リンク