2010-11-11 17 views
0

我已經創建了一個產品列表 - 即在代碼中手動列出。NHibernate:如何添加我手動創建到Nhibernate的列表<Product>?

是否有可能用nhibernate發送產品列表並讓它自動添加詳細信息。

產品類別上的屬性是數據庫上的自動遞增標識。

我有像這樣定義

public virtual int Id { get; set; } 

不過,當然這是在數據庫中的自動增量字段,因此我應該將其設置爲對象(標準C#類)爲它導入到數據庫。

如果這是可能的。

在我的映射我有它設置像這樣

<class name="Product"> 
    <id name="Id" column="ProductID"> 
    <generator class="assigned" /> 
    </id> 
<property name="Name" /> 
<more property names are here.............> 

我認爲它必須是可能的,但我有理解我怎麼可以把我的產品型號(列表)NHibernate的集合是一個問題自動

任何幫助非常感激

編輯

我插想澄清我在做什麼..我有基本上是實體的產品類。我創建了許多產品,這些產品列表如下:列表

因此,我希望BATCH將產品集合插入到數據庫中。

並闡明數據庫的ProductID字段是自動生成的,因此,如何將Class ID設置爲技術上將要插入的數據庫以及數據庫將處理此字段。

這裏是我的財產,其表示數據庫

public virtual int Id { get; set; } 

也許我應該把它設置爲可空INT的ID,然後我可以將它設置爲NULL ?????雖然我猜

我希望我已經解釋了我自己好一點。

+0

我也更新了我的答案 – 2010-11-11 16:19:57

回答

2

更新

這是思考的NHibernate爲對象級別的實體留存有幫助的。這不是一個強大的批量數據加載器/操縱器(我不知道這是一個ORM)。

所以給你的例子正確的做法是爲列表中的每個項目調用Session.SaveUpdate。因此,假如你有你的NHibernate會話訪問對象,你只需撥打:

foreach(Product p in ProductList){ 
    Session.SaveOrUpdate(p); 
} 

個人而言,我通常包裝這個邏輯到存儲庫(我通常使用的存儲庫模式)的例子是這樣的:

public void SaveOrUpdateAll(IEnumerable<Product> products){ 
    foreach(Product p in products){ 
    Session.SaveOrUpdate(p); 
    } 
} 

至於你第二個問題:如何處理Id?這很簡單,把ID保留原樣。 int類型不能爲null,所以它被初始化爲0.這足以告訴NHibernate這個實體還沒有被保存在數據庫中,並且它將被添加(你的產品的額外獎勵將使其Id被設置爲自動生成數據庫密鑰

感興趣NHibernate決定使用SaveOrUpdate方法在數據庫中創建新記錄或根據此數字是否大於0(即已分配)來更新現有記錄。

這取決於你的映射是正確的讓你的發電機具有如下:

<generator class="identity" /> 
+0

感謝您對發電機組的評論......我也更新了我的問題,這是我認爲解釋自己更好一點的編輯。 – Martin 2010-11-11 14:30:32