2010-06-03 168 views
6

我有一個用戶表,其中「ID」字段是一個GUID字段。手動設置ID

使用ASPNET我創建一個用戶帳戶並獲取GUID。我正嘗試在我的表中創建與該GUID作爲主ID的相關記錄。

我遇到的問題是,當我手動設置Users.ID NHibernate試圖做一個更新,而不是插入。我在NHibernate Profiler看到這個問題之前用「意外的行數:0;預期:1」來爆炸。

我對錶的用戶UsersMap樣子:

public class UsersMap : ClassMap<Users> 
{ 
    public UsersMap() 
    { 
     Id(x => x.ID, "ID"); //GUID 

     Map(x => x.Name, "Name"); //string 
     Map(x => x.PhoneNumber, "PhoneNumber"); //string 
     Map(x => x.FaxNumber, "FaxNumber"); //string 
     Map(x => x.EmailAddress, "EmailAddress"); //string 

     HasMany<UsersAddressBook>(x => x.usersAddressBook).KeyColumn("ID"); 
    } 
} 

任何想法?提前致謝。

回答

16

您需要指定您的ID將爲分配爲

Id(x => x.ID) 
    .GeneratedBy.Assigned(); 

這將允許您指定的值,沒有NHibernate嘗試執行更新。

+0

這似乎是最好的方法。它也很完美。 感謝您的幫助。 – 2010-06-07 16:37:34

1

ISession.Save有一個重載,允許您指定標識符。嘗試使用它,並且不要手動設置你的id屬性。

0

增值詹姆斯的回答我用:

Id(x => x.ID) 
    .GeneratedBy.Assigned() 
    .UnsavedValue(default_value); 

注意DEFAULT_VALUE是你的ID類型默認值
作爲我是0L因爲我用long對我的ID