2009-09-26 9 views
1

J'ai des problèmes avec la sauvegarde lorsque j'utilise Guid comme identifiant. quelqu'un peut-il ce que je manque ici? Je crée mon propre guid donc je ne veux pas qu'il soit généré par la base de données.ne sauvegarde pas dans la base de données avec guid comme iden- fluent-nhiberate

NOTE: j'ai essayé le guid.combo dans le mappage sans aucun succès.

public class Order 
{ 
    public virtual Guid Id { get; set; } 
    public virtual ICollection<OrderItem> OrderItems { get; set; } 
    public virtual User User { get; set; } 
    public virtual DateTime? CreateDate { get; set; } 
    public virtual DateTime? ShippedDate { get; set; } 
    public virtual string OrderStatus { get; set; } 

    public Order() 
    { 
     OrderItems = new Collection<OrderItem>(); 
    } 

    public virtual void AddOrderItems(OrderItem orderItem) 
    { 
     orderItem.Order = this; 
     OrderItems.Add(orderItem); 
    } 
} 

OrderMap:.

public OrderMap() 
    { 
     Id(x => x.Id).ColumnName("Id").GeneratedBy.Guid(); 

     Map(x => x.CreateDate); 
     Map(x => x.ShippedDate); 
     Map(x => x.OrderStatus); 

     References(x => x.User); 
     HasMany(x => x.OrderItems).Cascade.All().Inverse().LazyLoad(); 
    } 

Répondre

2

Id (x => x.Id) .ColumnName ("id") GeneratedBy.Assigned()

également .WithUnsavedValue (Guid.Empty) pourrait être nécessaire, mais je ne suis pas sûr. Vous devrez probablement dire à NHibernate d'utiliser Save ou Update (pas SaveOrUpdate) à chaque fois, de toute façon. Pas un gros expert ici ... mais vous devez utiliser .Assigned() à coup sûr.

+0

je vais essayer thx. –

+0

pas sûr de l'assigné mais quand j'ai changé pour enregistrer et mettre à jour au lieu de SaveOrUpdate cela a fonctionné. –

0

vous ne devez pas ajouter GeneratedBy.Guid() cela fonctionnera très bien aussi essayez d'utiliser GeneratedBy.GuidComb(); il est recommandé lors de l'utilisation de guids

+0

GeneratedBy.GuidComb(); Ne travaillez pas pour moi .. J'ai déjà essayé cela a oublié de le mentionner. –

+0

Pouvez-vous publier l'exception? –

+0

il n'y a pas d'exception .. il passe juste mais il ne sauve pas dans ma base de données. mais j'ai résolu ce problème, le problème était que j'ai fait un SaveOrUpdate, je l'ai changé pour enregistrer et cela fonctionne maintenant. merci de répondre –

0

Vous pouvez générer le guid avant d'insérer l'entité dans la base de données. L'avantage de cela est que les entités sont les mêmes avant et après la persistance dans la base de données. Il est plus facile d'ignorer la base de données dans le code.

public class Order 
{ 
    public Order() 
    { 
     Id = GuidGenerator.GenerateGuid(); 
    } 

    public Guid Id { get; private set; } 
} 

public class Mapping 
{ 
    Id(x => x.Id).GeneratedBy.Assigned().Access.AsCamelCaseField(); 
} 

GuidGenerator.GenerateGuid() retourne un guid généré par l'algorithme de peigne guid ou quelque chose comme Guid.NewGuid()

Questions connexes