2011-03-03 21 views
0

時,我有下面的類NHibernate的合計不加載越來越名單

public class Room 
{ 
    public virtual Guid Id { get; set } 
    public virtual string Name { get; set } 
    public virtual Guid LocId { get; set } 
    public virtual Location Loc { get; set; } 
} 

我開始交易,並呼籲Session.Save一個新的實體,它是正確地寫入到數據庫,但如果我立刻打電話的GetList( )列表返回Loc屬性爲除新實體外的所有實體分配,但如果在調用Save之前設置Loc,則它將分配給新實體。 Flush()不能解決問題。我錯過了什麼,我不想讓位置設置它。

+0

你爲什麼要映射LocId和Location? – Vadim 2011-03-03 18:30:32

+0

位置不是原始地圖的一部分。我已經添加了它,以便在調用GetList時現在返回該信息。我還沒有移除LocId,因爲此刻我沒有時間更換所有的用法。 – Thad 2011-03-03 18:57:17

+0

如果您尚未指定位置,那麼它會將「位置」設置爲引用位置的具體內容是什麼?數據庫中有什麼黑魔法?你是否手動設置LocId?這是否映射到數據庫中的同一列?發佈此實體的映射文件。 – jishi 2011-03-03 20:03:55

回答

0

映射LocLocId是NHibernate的不正確用法。使用room.Location = session.Load<Location>(locId)來分配位置。

0

您可以使用Session.Evict函數從會話中驅逐您的對象,否則它將加載您在給定id的會話對象中。但是,我強烈建議您從映射中刪除LocId屬性。

+0

Evict返回「可能的nonthreadsafe訪問會話」 – Thad 2011-03-04 13:38:42

+0

@Thad,很難說,沒有看到您的代碼,爲什麼你會得到例外。在更新之前可能你正在驅逐嗎? – Vadim 2011-03-04 15:44:20

+0

看來,我保存後我可以調用Session.Refresh(OBJ),它糾正了這個問題。現在要騰出時間來移除LocId。 – Thad 2011-03-04 16:06:20