2010-10-03 31 views
0

j'ai les entités suivantes:en NHibernate couramment, l'enregistrement d'un grand nombre à une entité, pourquoi je devrais donner une version à l'entité référencée

public class Worker 
{ 
public int WorkerID {get;set;} 
public string Name { get;set;} 
public int version { get;set;} 
} 

public class TransferOrder 
{ 
    public int TransferOrderID { get;set;} 
    public Worker workerTobeTransfered{get;set;} 
    public int version { get;set;}  
} 

et j'utilise la cartographie automatique, parler couramment nhibernate. lorsque je tente de sauver le TransferOrder comme ceci:

TransferOrder order = new TransferOrder(); 
order.Worker = new Worker(){WorkerID = 1}; 
Session.Save(order); 

mais dans la base de données, le workerID dans la table TransferOrder est NULL ??? mais quand je donne une version au travailleur, il est sauvegardé comme d'habitude?

TransferOrder order = new TransferOrder(); 
order.Worker = new Worker(){WorkerID = 1,Version = 1}; 
Session.Save(order); 

avis qu'il n'a pas d'importance ce que le numéro de version est donnée au travailleur tant que ce n'est pas 0. et j'ai un travailleur enregistré dans la base de données avec workerID = 1.

comment peut je gère ça? pourquoi devrais-je donner une version à l'ouvrier? est le nhibernate s'assurant que l'ouvrier est sauvé ?? et pourquoi ça devrait faire ça?

Répondre

0

Peut-être que c'est le scenerio:

Votre Work.WorkerID est une colonne d'identité dans votre table de travail et, vous ne pouvez pas insérer une ligne dans votre table qui se compose de seulement une entrée de colonne d'identité.

Mais lorsque vous fournissez également une valeur pour Work.Version, vous créez une insertion valide.

+0

Je crains que ce ne soit pas le cas, dans la table transferOrder, le WorkerID est une clé étrangère pour la table Worker. –

+0

@Nour - peut-être la même chose s'applique aux clés étrangères, par exemple une insertion ne sera pas valide si la seule valeur insérée est une insertion dans un champ défini comme une clé? –

+0

bien, comment puis-je m'assurer? Y a-t-il de la documentation sur cette situation? –

0

La "version" va probablement être mise en correspondance automatique avec un attribut NHibernate pour la vérification optimiste des accès simultanés. J'utiliserais Fluent NHibernate pour générer le mappage XML pour voir ce qu'il utilise, car je ne trouve rien par l'intermédiaire de Google sur les paramètres par défaut pour le mappage automatique.