是否将条件属性添加到FluentNHibernate类映射?

是否将条件属性添加到FluentNHibernate类映射?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我想使用FluentNhibernate为映射向NHibernate实体添加一个条件属性。我还想在我的搜索条件中按此属性订购 我有一个合同列表,我想根据合同上EndDate属性的传递将其标记为过期或未过期。至于订单,我想把过期的合同放在清单的最下面 我期望的结果是T-SQL语句 SELECT ID, BeginDate, EndDate, CASE WHEN EndDate > GETDATE() THEN 1 ELSE 0 END AS Expired FROM myTable ORDE

我想使用FluentNhibernate为映射向NHibernate实体添加一个条件属性。我还想在我的搜索条件中按此属性订购

我有一个合同列表,我想根据合同上EndDate属性的传递将其标记为过期或未过期。至于订单,我想把过期的合同放在清单的最下面

我期望的结果是T-SQL语句

SELECT ID, BeginDate, EndDate, CASE WHEN EndDate > GETDATE() THEN 1 ELSE 0 END AS Expired
FROM myTable
ORDER BY CASE WHEN EndDate > GETDATE() THEN 1 ELSE 0 END;
使用FluentNHibernate可以吗

我的(擦洗过的)实体

我对该实体的映射

namespace MyDomain.Mappings
{
    public class MyEntityMap : ClassMap<MyEntity>
    {
        public MyEntityMap ()
        {
            this.Table("myTable");
            this.Id(x => x.ID);
            this.Map(x => x.IsDeleted);
            this.Map(x => x.BeginDate);
            this.Map(x => x.EndDate);
        }
    }
}
名称空间MyDomain.Mappings
{
公共类MyEntityMap:ClassMap
{
公共MyEntityMap()
{
本表(“myTable”);
this.Id(x=>x.Id);
这个.Map(x=>x.IsDeleted);
this.Map(x=>x.BeginDate);
this.Map(x=>x.EndDate);
}
}
}

是的。可以将CASE语句指定为公式:

namespace MyDomain.Mappings
{
    public class MyEntityMap : ClassMap<MyEntity>
    {
        public MyEntityMap ()
        {
            this.Table("myTable");
            this.Id(x => x.ID);
            this.Map(x => x.IsDeleted);
            this.Map(x => x.BeginDate);
            this.Map(x => x.EndDate);
            this.Map(x=>x.HasExpired)
               .Formula("CASE WHEN EndDate > GetDate() THEN 1 ELSE 0 END");
        }
    }
}
名称空间MyDomain.Mappings
{
公共类MyEntityMap:ClassMap
{
公共MyEntityMap()
{
本表(“myTable”);
this.Id(x=>x.Id);
这个.Map(x=>x.IsDeleted);
this.Map(x=>x.BeginDate);
this.Map(x=>x.EndDate);
this.Map(x=>x.HasExpired)
.Formula(“EndDate>GetDate()然后1或0 END时的情况”);
}
}
}

这个公式显然是get only,但必须设置为字段或属性(强制使用公共getter和setter定义所述字段或属性,除非使用其他一些技巧设置私有支持字段)。在这种特定情况下,最好在属性getter中定义此逻辑,除非需要在查询中使用此计算,或者需要DB服务器的本地时间而不是客户端计算机的本地时间。

是的。可以将CASE语句指定为公式:

namespace MyDomain.Mappings
{
    public class MyEntityMap : ClassMap<MyEntity>
    {
        public MyEntityMap ()
        {
            this.Table("myTable");
            this.Id(x => x.ID);
            this.Map(x => x.IsDeleted);
            this.Map(x => x.BeginDate);
            this.Map(x => x.EndDate);
            this.Map(x=>x.HasExpired)
               .Formula("CASE WHEN EndDate > GetDate() THEN 1 ELSE 0 END");
        }
    }
}
名称空间MyDomain.Mappings
{
公共类MyEntityMap:ClassMap
{
公共MyEntityMap()
{
本表(“myTable”);
this.Id(x=>x.Id);
这个.Map(x=>x.IsDeleted);
this.Map(x=>x.BeginDate);
this.Map(x=>x.EndDate);
this.Map(x=>x.HasExpired)
.Formula(“EndDate>GetDate()然后1或0 END时的情况”);
}
}
}

这个公式显然是get only,但必须设置为字段或属性(强制使用公共getter和setter定义所述字段或属性,除非使用其他一些技巧设置私有支持字段)。在这种特定情况下,最好在属性getter中定义此逻辑,除非您需要在查询中使用此计算,或者需要DB服务器的本地时间而不是客户端计算机的本地时间。

非常感谢。这正是我想要的。也许我只是没有以正确的方式向谷歌爵士提出我的问题。非常感谢。这正是我想要的。也许我只是没有以正确的方式向谷歌爵士提出我的问题。