NHibernate将属性映射到行的存在

时间:2009-08-21 13:05:28

标签: c# nhibernate fluent-nhibernate

我有以下实体和Fluent NHibernate映射:

public class Advertiser
{
    public virtual int AdvertiserId { get; set; }
    public virtual string AdvertiserName { get; set; }
    public virtual bool IsPriorityEntity { get; set; }
}

public class AdvertiserMapping : ClassMap<Advertiser>
{
    public AdvertiserMapping()
    {
        Id(a => a.AdvertiserId).GeneratedBy.Identity();
        Map(a => a.AdvertiserName);
    }
}

由于PriorityEntity表中存在一行,IsPriorityEntity属性存储在数据库中。
查询类似于:

Select 
  AdvertiserId, 
  AdvertiserName,  
  CASE WHEN pe.PriorityEntityID IS NOT NULL 
       THEN 1 
       ELSE 0 END as IsPriorityEntity  
From Advertisers adv  
  Left Join PriorityEntity pe 
    on pe.PriorityEntityID = adv.AdvertiserID 
      and pe.EntityTypeID = 6

我不知道如何映射这样的东西。

1 个答案:

答案 0 :(得分:1)

你可以使它面向对象并映射整个东西:

public class Advertiser
{
    public virtual int AdvertiserId { get; set; }
    public virtual string AdvertiserName { get; set; }
    public virtual bool IsPriorityEntity { get { return Priority != null; } }
    public PriorityEntity Priority { get; set; }
}

或者你编写自定义sql来加载整个实体或singe属性:

(抱歉,我不使用流利,这是xml映射)

<property 
  name="IsPriorityEntity" 
  formula="Select CASE WHEN count(pe.PriorityEntityID) = 0 THEN 0 ELSE 1 END From PriorityEntity pe WHERE pe.PriorityEntityID = AdvertiserID"/>

您无法在此直接更新酒店。您可能还可以编写自定义sql来更新和插入,但我认为这将变得复杂。