2017-03-17 1 views
0

J'ai donc créé un nouveau projet simple pour aider un ami. Donc, j'ai fait un client de classe qui a une liste de chosesMappage NHibernate fluide avec HasMany qui ne parvient pas à retourner la collection enfant

Jusqu'ici tout va bien, maintenant avec la cartographie et le stockage de la relation. Je suis allé à la carte selon des cartes de classe Fluent NHibernate et a fini avec les éléments suivants

public class CustomerMap : ClassMap<Customer> { 
    Id(p => p.Id).GenerateBy.Guid(); 
    HasMany(p => p.Stuff).Access.CamelCaseField().KeyColumn("Id").Inverse().Cascade.AllDeleteOrphan(); 
} 

public class StuffMap : ClassMap<Stuff> { 
    Id(p => p.Id).GeneratedBy.Guid(); 
    Reference(p => p.Customer).Column("CustomerId).Not.Nullable(); 
} 

et mes cours

public class Customer { 
    private ISet<Stuff> stuff = new HashSet<Stuff>() 
    public virtual IEnumerable<Stuff> Stuff => stuff; 
    public void AddStuff(Stuff newstuff) { 
     newstuff.Customer = this; 
     stuff.Add(stuff); 
    } 
} 

public class Stuff { 
    public virtual Customer Customer { get; set; } 
} 

Tout cela fonctionne bien et quand je crée un nouveau client et ajouter un de plus Ajoutez des éléments dans la collection à l'aide de la méthode AddStuff et valide la transaction correctement écrite dans la base de données.

Mais maintenant, l'étrange commence, quand je fais un test comme le

suivant
[TestMethod] 
public void TestStuffAndCustomer() { 
    var customer = session.Add(new Customer()); 
    customer.AddStuff(new Stuff()); 
    session.Flush(); 

    var customer = session.Query<Customer>().Single(); 
    customer.Stuff.Should().HaveCount(1); 
} 

L'affirmation de la collection échoue avec raison que le nombre de la collection est 0. Cependant si je déboguer le test et vérifiez la collection contient un élément. L'assertion échoue cependant indépendamment.

Alors, quel est le problème avec cette configuration?

Répondre

0

Je pense que vous ajoutez un nouveau client et Stuff au Client sur la session, mais sans les enregistrer, vous rincer la session.

+0

J'ai essayé à la fois de valider la session et d'en ouvrir une nouvelle pour l'assertion au lieu de la purger. Neige semble fonctionner, ou cela fonctionne comme les deux éléments sont sauvés, mais je ne peux pas sembler vérifier le nombre de Stuffs dans l'assertion. –

+0

Vous pouvez modifier .Inverse(). Cascade.AllDeleteOrphan(); à .Inverse(). Cascade.SaveOrUpdate() then. – eyildiz

+0

J'ai essayé de ne pas le changer du tout. C'est étrange que je puisse vérifier le client récupéré dans debugmode et voir que la liste Stuff contient un élément mais l'assertion échoue alors. –