NHibernate Fluent One-to-One mapping
Je vais avoir bien du mal à exploiter HasOne cartographie avec NHibernate Fluent. Fondamentalement, la classe peut avoir un correspondant (un seul ou aucun) dans la classe B.
S'il vous plaît aider avec les AMap et Pagf les classes qui définissent les relations.
Merci.
public class A
{
public virtual int Id {get;set;}
public virtual string P1 {get;set;}
public virtual string P2 {get;set;}
public virtual string P3 {get;set;}
}
public class B
{
public virtual int Id {get;set;}
public virtual string P4 {get;set;}
public virtual string P5 {get;set;}
public virtual string P6 {get;set;}
}
Pourquoi ne pas
Salut penfold. Vous avez probablement raison, mais j'ai demandé à ma question à l'envers, je suppose. Voici ce que je suis vraiment essayer de faire. Table Un a des propriétés Id,p1,p2,p3. Tableau B a des propriétés Id,p4,p5,p6. Chaque enregistrement dans Une Table peut avoir au maximum un enregistrement correspondant dans la Table B buut il peut aussi avoir aucun. C'est en gros Un-à-un les relations (zéro ou un, pour être exact).
Avez-vous des tables pour d'autres rôles? Si oui, comment avez-vous identifier une personne est un Employé et non pas, par exemple, un Entrepreneur? Cela est possible par l'existence d'enregistrements dans une table, comme la table des Employés? Ou est-il une colonne dans la table Personne qui identifie le rôle de la personne? S'il vous plaît pouvez-vous mettre à jour votre question avec cette information.
J'ai fait modifier ma question penfold. Vous n'avez pas à le regarder comme Personne-la relation avec les Employés plus. - Il simplement d'un tableau (tableau principal) et de la table B, qui peut être regardé comme une extension de la table A. C'est un one-to-one relation d'enregistrement. Désolé de vous embêter mon premier exemple.
Désolé de ne pas voir la mise à jour de question avant que j'ai posté.
Employee
hériter de Person
? Comme un Employee
est un type de Person
. Ensuite, vous pouvez utiliser NHibernate l'héritage des installations lors de la cartographie de ces classes.Salut penfold. Vous avez probablement raison, mais j'ai demandé à ma question à l'envers, je suppose. Voici ce que je suis vraiment essayer de faire. Table Un a des propriétés Id,p1,p2,p3. Tableau B a des propriétés Id,p4,p5,p6. Chaque enregistrement dans Une Table peut avoir au maximum un enregistrement correspondant dans la Table B buut il peut aussi avoir aucun. C'est en gros Un-à-un les relations (zéro ou un, pour être exact).
Avez-vous des tables pour d'autres rôles? Si oui, comment avez-vous identifier une personne est un Employé et non pas, par exemple, un Entrepreneur? Cela est possible par l'existence d'enregistrements dans une table, comme la table des Employés? Ou est-il une colonne dans la table Personne qui identifie le rôle de la personne? S'il vous plaît pouvez-vous mettre à jour votre question avec cette information.
J'ai fait modifier ma question penfold. Vous n'avez pas à le regarder comme Personne-la relation avec les Employés plus. - Il simplement d'un tableau (tableau principal) et de la table B, qui peut être regardé comme une extension de la table A. C'est un one-to-one relation d'enregistrement. Désolé de vous embêter mon premier exemple.
Désolé de ne pas voir la mise à jour de question avant que j'ai posté.
OriginalL'auteur Dragan Velickovski | 2013-03-30
Vous devez vous connecter pour publier un commentaire.
Pour obtenir
one-to-one
cartographie de travail, vous aurez besoin d'ajouter une propriété de typeB
à la classeA
et vice-versa, comme par le code ci-dessous. Ces références sont requises dans les deux classes depuis NHibernate ne prend pas en charge unidirectionnelle un-à-un.Puis dans la courant de mappages vous aurez besoin d'ajouter le suivant
Veuillez noter que l'un-à-plusieurs de cartographie en
BMap
est marqué commeUnique
. Ce est utilisé pour créer une contrainte de colonne si vous utilisez NHibernate pour générer la DB schéma.Pour créer un nouvel enregistrement, vous serait alors écrire quelque chose comme:
Enfin une mise en garde, la version actuelle de NHibernate, 3.4, ne prend pas en charge les suppressions en cascade des orphelins de l'un-à-un. Voir ici pour le rapport de bug. Cela signifie que si vous écrivez quelque chose comme
session.Delete(classA);
ensuite, les associés de classe B d'enregistrement ne seront pas supprimés automatiquement.OriginalL'auteur mickfold