2009-09-14 46 views
0

我一直在爲此奮鬥了2天,所以我想我會在這裏給它一個鏡頭。爲什麼不能馬上得到孩子的身份證?

我的場景看起來像這樣。我有一個客戶和客戶電話。現在,我同時保存客戶和客戶電話,但客戶電話不會立即獲得Id。但如果我重定向到其他網站並在那裏獲得Customer對象,CustomerPhone將具有Id。

我的類代碼如下所示。

public virtual int Id { get; private set; } 
    public virtual string Name { get; set; } 
    public virtual string OrgNumber { get; set; } 
    public virtual DateTime? CreateDate { get; set; } 
    public virtual bool Active { get; set; } 
    public virtual string Email { get; set; } 

    public virtual IList<CustomerPhone> CustomerPhones { get; set; } 

    public Customer() 
    { 
     CustomerPhones = new List<CustomerPhone>(); 
    } 

    public virtual void AddCustomerPhones(CustomerPhone customerPhone) 
    { 
     customerPhone.Customer = this; 
     CustomerPhones.Add(customerPhone); 
    } 

我使用流暢的nhibernate進行映射,但是我看過它,看起來並不是問題。

如果您對此有任何想法,請寫信,因爲這對我造成了很大的問題。

+0

請將您的ClassMaps發佈給您的客戶和CustomerPhones。 – mxmissile 2009-09-14 14:24:39

回答

2

這是因爲你的會話可能是基於請求的。所以在請求結束時,它會自動刷新。沒有刷新,你的東西只是坐在Nhib會話中,並沒有添加到數據庫中,因此它沒有在數據庫中生成的Id。 (我假設您使用的是主鍵身份)

手動沖洗它,您將擁有該ID。

+0

感謝你們兩個session.Flush()是問題。乍得感謝你提到最終請求的原因,這正是我如何設置,這讓我現在瞭解了很多。 – 2009-09-15 11:06:35

+0

沒問題。很高興我能幫上忙。如果你不知道,每個請求的會話確實是它應該是的方式,並且你正在遵循最佳實踐。 – 2009-09-15 12:19:56

1

沒有看到你的映射,我只能給一般的建議......但我以前遇到過這個,當NHibernate的會話中有一些未決的變化。對session.Flush()的調用通常會將持續實體的「問題」排序並獲取ID值。

乾杯, 約翰