2010-06-03 16 views
6

Mam tabelę Użytkownicy, gdzie pole "ID" jest polem identyfikatora GUID.Ręczne ustawianie ID

Za pomocą ASPNET tworzę konto użytkownika i odzyskaję identyfikator GUID. Próbuję utworzyć powiązane rekordy w tabelach z tym identyfikatorem GUID jako głównym identyfikatorem.

Problem, który napotykam, polega na tym, że gdy ręcznie ustawiam Users.ID, NHibernate próbuje wykonać aktualizację, a nie wstawkę. Widzę to z profilerem NHibernate, zanim wyskoczy z "Nieoczekiwaną liczbą wierszy: 0; Oczekiwano: 1".

Moja UsersMap dla Użytkowników tabeli wygląda następująco:

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"); 
    } 
} 

jakieś pomysły? Z góry dziękuję.

Odpowiedz

16

Musisz określić, że Twój identyfikator będzie przypisany.

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

To pozwoli ci określić wartość, bez NHibernate próbuje wykonać aktualizację.

+0

Wydaje się, być najlepszą metodą. Działa również idealnie. Dzięki za pomoc. –

1

ISession.Save ma przeciążenie, które pozwala określić identyfikator. Spróbuj go użyć i nie ustawiaj właściwości id ręcznie.

0

Jako wartość dodaną, aby odpowiedzieć Jamesa użyłem:

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

Uwaga że DEFAULT_VALUE jest wartość domyślna dla danego typu Id
jak we mnie jest 0L ponieważ używam long dla mojego Id

Powiązane problemy