5

Zajęło mi trochę czasu, aby znaleźć odpowiedź na to, więc pomyślałem, że podzielę się miłością.Używanie mapowania NHibernate przez kod: Nie można wstawić jawnej wartości dla kolumny tożsamości w tabeli "DietUser", gdy IDENTITY_INSERT jest ustawione na WYŁ.


Podczas korzystania z nowego mapowania NHibernate przez kod za pomocą SQL Server nie mogę zapisać obiektu. Podczas zapisywania podmiot A System.Data.SqlClient.SqlException jest wyrzucane z następującym komunikatem (minus nazwę tabeli):

„Nie można wstawić wyraźną wartość dla kolumny tożsamości w tabeli«DietUser»kiedy IDENTITY_INSERT jest ustawiony w pozycji OFF . "

Moja tabela wykorzystuje identyfikator tożsamości i podmiotu & mapowania wyglądać następująco:

public class User 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual string Username { get; set; } 
    public virtual string Password { get; set; } 
    public virtual short DailyPoints { get; set; } 
} 

public class UserMapping : ClassMapping<User> 
{ 
    public UserMapping() 
    { 
     Id(x => x.Id); 
     Property(x => x.Name); 
     Property(x => x.Username); 
     Property(x => x.Password); 
     Property(x => x.DailyPoints); 
    } 
} 

wiem jak bym na mapie za pomocą odwzorowania XML ale chcę użyć wbudowanej mapowania przez kod, jeśli w ogóle możliwe.

Odpowiedz

10

Po kilku kopaniu na forach miałem szczęście i odkryłem, jak to odwzorować. Numer example Fabio provides jest świetny, jeśli zamierzasz używać identyfikatora GUID dla identyfikatora lub czegoś podobnego, ale jeśli chcesz użyć identyfikatora tożsamości (zobaczysz także kilka innych), musisz określić, jaki generator zamierzasz posługiwać się. Oto mój zaktualizowane mapowanie że działa:

public class UserMapping : ClassMapping<User> 
{ 
    public UserMapping() 
    { 
     Id(x => x.Id, map => map.Generator(Generators.Identity)); 
     Property(x => x.Name); 
     Property(x => x.Username); 
     Property(x => x.Password); 
     Property(x => x.DailyPoints); 
    } 
} 
+0

Czy używasz identyfikatora GUID jako kolumny tożsamości? –

+0

Nie, tylko standardowa kolumna tożsamości, którą zobaczysz w większości tabel serwera sql. – bressain

0

Czy próbujesz przypisać wartość do właściwości Id przed utrwaleniem obiektu? Czy możesz dodać fragment kodu, który próbuje utrwalać zmiany w bazie danych?

Podczas gdy zacząłem uczyć się NHibernate, zbudowałem małą wersję demonstracyjną opisującą pierwsze kroki. Oto jest. Hope to pomaga.

+0

Nie byłem, to mnie podsycało. Właśnie ustawiłem nazwę, nazwę użytkownika, hasło i codzienne punkty. – bressain

1

Mówiąc identyfikatorów osobistych, jeśli ustawisz generator=identity, NHibernate nie byłby w stanie wykonać wkładkę wsadowego, ponieważ potrzebuje dodatkowy wniosek do uzyskania tego krwawego identyfikator generowany przez bazę danych.

Powiązane problemy