2009-08-21 3 views
0

Ich habe die folgende Einheit und Fluent NHibernate-Mapping:NHibernate Mapping eine Eigenschaft auf die Existenz einer Reihe

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); 
    } 
} 

Die IsPriorityEntity Eigenschaft wird in der Datenbank, die von der Existenz einer Zeile in der PriorityEntity Tabelle gespeichert.
Die Abfrage sieht ungefähr so ​​aus:

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 

ich ratlos bin, wie so etwas zu kartieren.

Antwort

1

Man könnte es orientiert machen das Objekt und das ganze Zeug Karte:

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; } 
} 

Oder Sie schreiben benutzerdefinierte SQL für die gesamte Entität Laden oder die Seng Eigenschaft:

(sorry, I don‘ t verwenden fließend, dies ist die XML-Mapping)

Sie können die Eigenschaft nicht direkt hier aktualisieren. Sie könnten wahrscheinlich auch benutzerdefinierte SQL schreiben, um zu aktualisieren und einfügen, aber ich denke, das wird kompliziert werden.