如何将单个日期时间列映射到模型中的两个单独的日期时间属性

时间:2014-09-12 10:36:09

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

如果我有一个带有DateTime属性的对象,是否可以将Date和Time映射到同一对象中的单独属性? I.e具有StartDateTime,StartDate和StartTime的对象,其中StartDateTime作为数据库中的列存在,StartDate和StartTime仅引用StartDateTime列的不同部分。

提前感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

我想说,这里的诀窍是:

  1. 将一个属性映射到该列。它可以隐藏在模型的其他部分,甚至是受保护的(例如,见here
  2. 创建两个虚拟(我的意思是未映射的属性)公共属性,用于访问和设置该映射值。
  3. 例如,我用于映射version的非常类似的场景。所以虽然这将是映射:

    <version name="Timestamp" generated="always" unsaved-value="null" type="BinaryBlob">
      <column name="RowVersion" not-null="false" sql-type="timestamp"/>
    </version>
    

    它正在使用byte[],很难发送到UI - 客户端。所以这就是域实体表示。

    protected virtual byte[] Timestamp { get; set; }
    
    public virtual string Version
    {
        get { return Timestamp.IsEmpty() ? null : Convert.ToBase64String(Timestamp); }
        set { Timestamp = value.IsEmpty() ? null : Convert.FromBase64String(value); }
    }
    

    有了这些,我们可以versionstring作为QueryOver发送给客户...并将其取回...

    注意:我会将DB列映射到公共属性。这样可以更轻松地在{{1}}个查询中使用该属性...至少getter可以是公开的