C# Fluent NHibernate日期时间UTC
我想创建一个fluent nhibernate映射,以以下方式映射DateTime字段:C# Fluent NHibernate日期时间UTC,c#,nhibernate,fluent-nhibernate,mapping,fluent-nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Mapping,Fluent Nhibernate Mapping,我想创建一个fluent nhibernate映射,以以下方式映射DateTime字段: 保存时-保存UTC值 读取时-调整到本地时区值 实现此映射的最佳方法是什么?我个人认为,我会将日期存储在UTC中的对象中,然后在读取/写入时在对象中进行转换。然后,您可以引用属性在映射中使用的支持字段(这样做不太“流畅”,但您可以使用FluentNH进行映射)。如果UTC值在代码中可能对您有价值,那么只需公开它 public class MyClass { ... //Don't map th
实现此映射的最佳方法是什么?我个人认为,我会将日期存储在UTC中的对象中,然后在读取/写入时在对象中进行转换。然后,您可以引用属性在映射中使用的支持字段(这样做不太“流畅”,但您可以使用FluentNH进行映射)。如果UTC值在代码中可能对您有价值,那么只需公开它
public class MyClass
{
...
//Don't map this field in FluentNH; this is for in-code use
public DateTime MyDate
{
get{return MyDateUTC.ToLocalTime();}
set{MyDateUTC = value.ToUniversalTime();}
}
//map this one instead; can be private as well
public DateTime MyDateUTC {get;set;}
}
...
public class MyClassMap:ClassMap<MyClass>
{
public MyClassMap()
{
Map(x=>x.MyDateUTC).Column("MyDate");
//if you made the UTC property private, map it this way instead:
Map(Reveal.Member<DateTime>("MyDateUTC")).Column("MyDate");
}
}
公共类MyClass
{
...
//不要在FluentNH中映射此字段;这是供代码使用的
公共日期时间MyDate
{
获取{return MyDateUTC.ToLocalTime();}
设置{MyDateUTC=value.ToUniversalTime();}
}
//相反,映射这个;也可以是私有的
公共日期时间MyDateUTC{get;set;}
}
...
公共类MyClassMap:ClassMap
{
公共MyClassMap()
{
Map(x=>x.MyDateUTC).Column(“MyDate”);
//如果将UTC属性设置为私有,请改为按以下方式映射:
地图(显示成员(“MyDateUTC”))。栏(“MyDate”);
}
}
看起来像是关于当地时间补液的重复,这确实应该是一个演示问题。实际上,我的问题仍然有效,因为您引用的链接只提到这应该通过自定义映射来完成,但没有提供示例代码。我希望有一个解决方案,地图会自动调整所需的时间。要做到这一点,请查看以下帖子:。您将在NullSafeGet中返回dateTime.ToLocalTime();。我喜欢这种方法。它解决了问题,并不复杂。唯一的缺点是,我必须为每个日期定义两个属性,但这并不太糟糕。我将MyDateUTC设置为专用变量,但Reveal.Member映射不起作用。您可以尝试将MyDateUTC设置为字段而不是属性;只需删除Get/Set声明。通常显示。成员用于访问私有支持字段,因此它可能不是在搜索私有属性。我很好。因为我已经在使用嵌套映射,所以仍然能够使用fluent映射。请看这里:这将是下一个建议,将映射放在私有可见性不成问题的地方。