0

je l'entité suivanteNHibernate ne retourne pas de valeur générée automatiquement après insertion

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

et j'ai la cartographie couramment NHibernate suivante

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

Quand je sauve cette entité (avec _session.Persist(entity)) Dans la base de données, il met à jour l'ID généré, mais il ne met pas à jour la valeur CreatedDateTime, bien que CreatedDateTime soit généré correctement dans la base de données. Est-il possible de configurer cette entité pour renvoyer également les valeurs générées automatiquement après l'insertion?

grâce

Répondre

1

Pour votre cartographie EntityMap pour votre propriété CreatedDateTime, vous pouvez utiliser la propriété Généré comme in-

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

Ceci vous donnera la date UTC qui a été généré dans votre ligne de table.

Votre exemple de code ressemble à une sorte de générateur d'ID pour votre table Entity. Vous ne savez pas exactement où vous générez votre champ Id (sur le client ou dans la base de données). Si vous générez votre identifiant dans la base de données, vous pouvez également modifier votre EntityMap pour obtenir l'ID de la database-

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

qui charge votre défaut initialisé objet entité avec la base de données générée identité lorsque vous enregistrez l'objet (en supposant que vous le génériez du côté de la base de données).

Espérons que cela aide.

+0

Merci de votre aide. Je vais essayer lundi au travail. – kord

+0

Carte (x => x.CreatedDateTime) .Generated.Always() -> Fonctionne – kord