2013-07-18 92 views
1

我有一個帶有一些繼承的模型,它使用nhibernate來持久化數據庫。與流利的nhibernate nhibernate映射工作正常,但我有一個場景,我需要爲現有的父母保存一個孩子。我的模型是這樣的:爲一個存在的父親保存一個子對象

public class Item 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    // other properties 
} 

public class ItemCommercial : Item 
{ 
    public decimal Value { get; set; } 
    // other properties 
} 

在我的數據庫,各表由Id <-> Id(每一個)有關。

我想知道,如何在數據庫上保存一個實例用於存在的Item。我有項目的ID,但我不知道howt說NHibernate的說剛子,而不是創建一個新的項目,樣品:

session.Save(itemCommercialObj); // will create a Item and ItemCommercial with the same Id 

謝謝。

+0

也許你在'ItemCommercial'中發現了manualy寫入函數,女巫會用你想要的數據返回'Item'對象。所以,如果你調用Item i = itemCommercialObj.ConvertMyselfToItem(),你會得到想要的對象 –

+0

不,我不能,我不得不使用我的ORM,因爲它會被其他不同的數據庫使用。 –

回答

0

正如我也answered here

不,這是不可能的「升級」已堅持對象到它的子類一樣簡單。 Nhibernate根本不支持這一點。 如果安全具有相同ID作爲基類的子類,NHibernate的只是創建與對象的新ID的副本,而不是創建參考會員的...

所以基本上你可以做任何

  1. 複製客戶的數據爲會員,刪除客戶和保存會員
  2. 使用無子類不同的對象結構,其中成員是不同的表與它自己的ID,並給客戶參考
  3. 使用本地SQL插入排成員...
0

你不能這樣的對象的運行時間類型,因此NH不支持它。將設計更改爲

public class Item 
{ 
    public long Id { get; set; } 
    public string Name { get; set; } 
    public CommercialValue CommercialValue { get; set; } 
    // other properties 
} 

public class CommercialValue 
{ 
    public Item Item { get; set; } 
    public decimal Value { get; set; } 
    // other properties 
} 

和一對一映射。然後,它是設置CommercialValue財產

相關問題