我有以下实体和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
我不知道如何映射这样的东西。
答案 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来更新和插入,但我认为这将变得复杂。