流畅的NHibernate自动映射:将日期时间更改为时间戳

Chr*_*ert 4 c# nhibernate fluent-nhibernate automapping

我正在(通过NHibernate的流畅界面)深入了解自动化.非常好,但我遇到了DateTimes的一个小问题.我需要将数据格式更改为时间戳,否则NHibernate会截断毫秒数.

我找到了几个信息来源,最好的信息来源是: AutoMapping Info 1他在哪里更改列名和属性类型.问题是,根据这份文件,流畅的自动化有所改变.

现在我无法弄清楚如何让自动化"改变类型".我尝试了下面的代码,但我被卡住了.同样,我想要做的只是告诉automapper:

使用DateTime的时间戳可以防止在使用自动化时截断毫秒.

有人有个主意吗?代码到目前为止:

   public class DateTimeToTimestamp : IClassConvention  
{  
    public bool Accept(IClassMap target)
    {
        return target.GetType() == typeof(DateTime);
    }

    public void Apply(IClassMap target)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,非常感谢答案......这对我来说足够舒适.如果我真的有3个需要这种精度的类,我可以处理三次写入.特别是因为所有其他属性的映射仍然完美,并且以下代码仅替换我想要的一个属性...非常好!

如果有人知道更通用的方法,请随意添加它,但是现在,我很高兴!

我案件的代码是:

    public class DateTimeToTimestamp : IAutoMappingOverride<CustomTime>
{
    public void Override(AutoMap<CustomTime> mapping)
    {
        mapping.Map(x => x.ScanDate).CustomTypeIs("timestamp");
    }
}
Run Code Online (Sandbox Code Playgroud)

Dan*_* T. 11

要扩展Derek的答案,为了在更一般的层面上进行,您将使用自动化约定:

public class TimestampTypeConvention : IPropertyConvention, IPropertyConventionAcceptance
{
    public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        criteria.Expect(x => x.Type == typeof (DateTime));
    }

    public void Apply(IPropertyInstance instance)
    {
        instance.CustomType<TimestampType>();
    }
}
Run Code Online (Sandbox Code Playgroud)