0

Ich habe die folgende EinheitNHibernate nicht zurück automatisch generierten Wert nach Einsatz

public class Entity{ 
    public virtual int Id { get; set; } 
    public virtual DateTime CreatedDateTime { get; protected set; } 
} 

und ich habe folgendes nhibernate fließend Mapping

public class EntityMap : ClassMap<Entity> 
{ 
    public Entity() 
    { 
     Id(x => x.Id); 
     Map(x => x.CreatedDateTime) 
      .Not.Nullable() 
      .Default("GETUTCDATE()") 
      .ReadOnly(); 
    } 
} 

Wenn ich diese Einheit speichern (mit _session.Persist(entity)) In der Datenbank wird die generierte ID aktualisiert, der CreatedDateTime-Wert wird jedoch nicht aktualisiert, obwohl CreatedDateTime in der Datenbank ordnungsgemäß generiert wird. Gibt es eine Möglichkeit, diese Entity so zu konfigurieren, dass nach dem Einfügen auch die automatisch generierten Werte zurückgegeben werden?

dank

Antwort

1

Für Ihre EntityMap Mapping für Ihre CreatedDateTime Eigenschaft können Sie die generierte Eigenschaft als Ein-

Map(x => x.CreatedDateTime).Generated.Always(); 

Dadurch wird die UTC-Datum wird abrufen verwenden, die in Ihrer Tabellenzeile erzeugt wurde.

Ihr Beispielcode sieht aus wie eine Art von ID-Generator für Ihre Entity-Tabelle. Es ist nicht klar, wo genau Sie Ihr Id-Feld generieren (auf dem Client oder in der Datenbank). Wenn Sie Ihre ID in der Datenbank generiert werden, können Sie auch Ihre EntityMap ändern Sie die ID aus der database-

Id(x => x.Id).GeneratedBy.Identity(); 

zu erhalten, die Ihr Standard mit der Datenbank generiert Identität initialisiert Objekt Entity geladen wird, wenn Sie das Objekt speichern (vorausgesetzt, Sie generieren es von der Datenbankseite).

Hoffnung, das hilft.

+0

Danke für Hilfe. Ich werde es am Montag bei der Arbeit versuchen. – kord

+0

Karte (x => x.CreatedDateTime) .Generated.Always() -> Works – kord