2011-04-29 41 views
0

從數據庫加載的對象的對象必須看起來喜歡這樣的實體:我如何安裝它不是持久的使用NHibernate

public class Driver 
{ 
    IVehicle Vehicle {get;set;} 
} 

和實施IVehicle(汽車,自行車,火車幾個不同的類別。 ..)

我怎樣才能選擇我的驅動程序保持IVehicle的具體實現,並記住這一選擇下一次我從數據庫中加載驅動程序?

我正在使用NHibernate 3.0與FluentNHibernate進行持續性映射。

編輯

好吧,我想通了最後。我需要映射車輛,並以下列方式每個子類映射:

public void VehicleMap : ClassMap<IVehicle> 
{ 
    public VehicleMap() 
    { 
     Id(v => v.Id); // Needed to add a property which will be used as Id 
     DiscriminateSubClassesOnColumn("TYPE"); 
    } 
} 

public void CareMap : SubclassMap<Car> 
{ 
    public CarMap() 
    { 
     DiscriminatorValue("CAR"); 
    } 
} 

此外,我需要從驅動器映射

回答

1

你需要決定如何你繼承映射禁止車輛的延遲加載將工作。請參閱文檔http://nhibernate.info/doc/nh/en/index.html#inheritance

一旦完成,您可以將您的Driver類映射爲級聯Vehicle依賴項。在那之後,NHibernate會自動從數據庫中加載適當的項目。

UPDATE

您將需要持續的類型的字符串名字。那麼你的車輛類可以是一個未映射的屬性,它可以做類似於:

public class Driver 
{ 
    private string vehicleTypeName; 
    private IVehicle vehicle; 

    public IVehicle Vehicle 
    { 
     get 
     { 
      if (vehicle == null) 
      { 
       vehicle = typeof(IVehicle).Assembly 
            .CreateInstance(vehicleTypeName); 
      } 
      return vehicle; 
     } 
    } 
} 
+0

問題是不同的車輛沒有保存在數據庫中。也許我的例子很糟糕,所以我會試着用另一種方式來解釋:不同的車輛不是我係統中的實體,而是實用程序類,它們都以不同的方式實現某種方法。我需要找出一種方法來保存,爲每個司機,哪些課堂上使用(我選擇創建適當的類,並且我想要選擇記憶..) – ItayMaoz 2011-04-29 16:43:06

+0

謝謝,雖然我找到了不同的方式來做它(用解決方案編輯我的問題) – ItayMaoz 2011-04-29 20:04:34

相關問題