2011-12-22 3 views
0

Je suis nouveau à NHibernate et moi avons une tâche d'améliorer un projet avec un existinig implementation.The conception actuelle est simple, comme dans le « premier projet »:un multiple de nombreuses relations de cartographie

store(1)->(many)Employee 

maintenant, je veux faire:

store(1)->(many)Employee AND 
Empoyee(1)->(many)Child 

réimplémenter la logique de mise en correspondance du magasin-employé à l'employé-enfant ne fonctionne pas. J'ai essayé de trouver s enter code here quelque chose de similaire sur le net, mais pas de chance. Toute astuce sur la cartographie est très appréciée.

Merci

@MeckLey: Merci beaucoup pour la réponse - Je suis en train de tester la cartographie en utilisant la spécification persistante examples..in pseudocode iam faire quelque chose comme:

new PersistenceSpecification<Child>(_session, new CustomEqualityComparerChild()) 
    .CheckProperty(c => c.Name, "Child1Name") 
    --other Child prperties-- 
    .CheckReference(c => c.Employee, new Employee{ 
     Store = new Store{--store properties--}, 
      --other Employee Properties-- 
     }); 

étrangères Les colonnes clés qui ne doivent pas avoir de valeur nulle sont des valeurs nulles insérées. J'essaie de faire le test pour que tout soit créé dans l'ordre:

Store->Employee->Child 

..mais je ne

@Meckley ok, voici la vraie chose .. « store » est « ReturnOrder », « employé » est « ReturnOrderLineItem » et « chlid » est « ReturnOrderReplacementItem » les classes suivent la structure exacte du « FirstExample » et les mappings sont comme suit:

public ReturnOrderMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.OrderTrackingNumber); 
     Map(x => x.UserId); 

     HasMany(x => x.ReturnOrderLineItems).Inverse().Cascade.AllDeleteOrphan(); 
    } 

public ReturnOrderLineItemMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Sku); 
     Map(x => x.Status); 
     Map(x => x.Comments); 

     HasMany(x => x.ReturnOrderReplacementItems).Inverse().Cascade.AllDeleteOrphan(); 
     References(x => x.ReturnOrder); 
    } 

public ReturnOrderReplacementItemMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Quantity); 
     Map(x => x.Size); 
     References(x => x.ReturnOrderLineItem); 
    } 

Je vais passer les tests de cartographie et essayer pour voir si cela fonctionne vraiment, peut-être que vous ne pouvez pas tester quelque chose comme celui-ci avec PesristenceSpecification ..

+0

la relation entre l'employé et l'enfant n'a rien à voir avec la relation entre magasin et employé. Cela dit, la mécanique de la relation de l'employé à l'enfant, et vice versa, sont les mêmes. qu'avez-vous essayé jusqu'ici qui échoue? –

+0

Merci pour la réponse - J'essaie de tester le Maping en utilisant les exemples de spécification persistante .. en pseudo code iam faire quelque chose comme: – Nikos

+0

s'il vous plaît mettre à jour votre message original plutôt que d'entrer du code dans les commentaires. –

Répondre

0

OK, fait fournir work.I quelques détails pour toute personne rencontre la même tâche:

1) La mise en correspondance pour l'enfant dans le EmployeeMap devrait être hasMany (x => x .Child) .Cascade.AllDeleteOrphan(); (SANS inverse)

2) Dans le tableau des enfants permettent NULLS pour le champ foreignkey de telle sorte que la suppression d'un objet enfant est possible

3) Tout d'abord enregistrer l'objet de magasin qui sauvera les employés qui s'y rattachent et 4) Créez une méthode séparée pour enregistrer une instance Empolyee - similaire à la méthode qui enregistre une instance Store - qui sauvegardera à son tour tous les objets enfants ajoutés à la liste des objets enfants de l'employé. .

Questions connexes