2009-08-21 7 views
0

の存在プロパティI有し、以下のエンティティと流暢NHibernateのマッピング: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); 
    } 
} 

IsPriorityEntityプロパティはPriorityEntity表の行が存在することによって、データベースに格納されています。私はこのような何かをマッピングする方法についての損失で午前

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

あなたはそれがオブジェクト指向と全体のものにマップ作ることができます:(申し訳ありませんが、私は「ドン

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を書きます

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

ここで直接プロパティを更新することはできません。あなたはおそらく、カスタムSQLを書き込んで更新して挿入することもできますが、これは複雑になると思います。