2010-06-03 9 views
6

Ich habe eine Benutzer Tabelle, wo das Feld "ID" ein GUID-Feld ist.Manuelles Einstellen der ID

Mit ASPNET erstelle ich ein Benutzerkonto und bekomme die GUID zurück. Ich versuche, verknüpfte Datensätze in meinen Tabellen mit dieser GUID als Haupt-ID zu erstellen.

Das Problem, das ich in renne, ist, dass, wenn ich Users.ID manuell einstelle, NHibernate versucht, ein Update, kein Insert zu tun. Ich sehe dies mit dem NHibernate Profiler, bevor es mit "Unerwarteter Zeilenanzahl: 0; Erwartet: 1" ausbricht.

Meine UsersMap für die Tabelle Benutzer wie folgt aussieht:

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

Irgendwelche Ideen? Danke im Voraus.

Antwort

16

Sie müssen angeben, dass Ihre ID zugewiesen wird.

Damit können Sie den Wert angeben, ohne dass NHibernate versucht, ein Update durchzuführen.

+0

Dies scheint sei die beste Methode. Es funktioniert auch perfekt. Danke für Ihre Hilfe. –

1

ISession.Save hat eine Überladung, mit der Sie den Bezeichner angeben können. Probieren Sie es aus und legen Sie Ihre ID-Eigenschaft nicht manuell fest.

0

Als Mehrwert zu James Antwort, die ich verwendet:

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

Beachten Sie, dass default_value Standardwert für Ihre Id-Typ ist
wie in mir ist 0L weil ich long für meine Id verwenden