Minimum et de façon correcte à la carte un-à-plusieurs avec NHibernate

Je suis nouvelle dans NHibernate et C#, donc s'il vous plaît être doux!

J'ai les deux NHibernate entités:

Employee
{
    private long _id;
    private String _name;
    private String _empNumber;
    private IList<Address> _addresses;

    //Properties...
}

et

Address
{
    private long _id;
    private String _addrLine1;
    private String _addrLine2;
    private String _city;
    private String _country;
    private String _postalCode;

    //Properties
}

et ils ont un one-to-many relation de Employee à Address (chaque
l'employé peut avoir plusieurs adresses dans leur dossier)
. Idéalement en ignorant
le fait que plus d'un employé peuvent résider à la même adresse.

Je comprends ce du point de vue d'objets en mémoire (le NHibernate
les entités). Ce que j'ai du mal avec les fichiers de mappage (et je prends un
simple exemple ici). C'est ce que j'ai à ce jour:

//Intentionally left out XML and <hibernate-mapping> 
//Mappings for class 'Employee'. -->
<class name="Employee" table="Employees">
    <id name="ID">
        <generator class="native">
    </id>

    <property name="Name" />
    <property name="EmpNumber" />

    <bag name="Addresses">
        <key column="AddressId" />
        <one-to-many class="Address" />
    </bag>
</class>

et

//Intentionally left out XML and <hibernate-mapping> .
//Mappings for class 'Address'
<class name="Address" table="Addresses">
    <id name="ID">
        <generator class="native">
    </id>

    //Intentionally left out name="Employee" 
    //as I don't have corresponding field in Address entity.
    <many-to-one class="Employee" column="EmployeeID" cascade="all" />

    <property name="AddrLine1" />
    <property name="AddrLine2" />
    <property name="City" />
    <property name="Country" />
    <property name="PostalCode" />
</class>
  1. Est-ce correct?
  2. Si non, il me semble que ce qui me manque ici, c'est un champ dans la Address
    entité qui est une référence à la correspondante Employee entité. Mais si
    alors, je ne comprends pas pourquoi cela est nécessaire: je n'ai pas besoin d'aller chercher une
    Address à partir d'un Employee, seulement dans l'autre sens...
  • Il me semble que vous avez besoin d'un beaucoup de beaucoup de relation ici et pas un seul de beaucoup si les adresses sont uniques dans la table d'adresses. Ce serait un de nombreux de nombreux de la table qui stocke un id d'employé et un code d'adresse. De cette façon, un employé peut être liée à une ou plusieurs adresses et adresse peut appartenir à plus de 1 employé.
  • Je ne veux pas les adresses appartenir à plus d'un employé. C'est délibéré.
  • Si c'est le cas, vous devrez ajouter un id d'employé dans la table d'adresses pour repérer les adresses appartiennent à qui les employés. Si plusieurs adresses peuvent exister dans la table d'adresses avec le même id de l'employé. C'est de cette façon nhibernate voudrais savoir comment remplir private IList<Address> _addresses; dans le Employee objet. Je voudrais aussi vous suggère d'avoir un Employee objet dans le cadre de la Address objet que la navigation sur les deux côtés de la relation vient souvent en pratique, même si il ne fait pas nécessairement sens à partir d'une logique d'entreprise point de vue de tous les temps.
  • Pourquoi êtes-vous en ajoutant cascade tous à partir de l'adresse au lieu de l'employé?
  • a) Pourriez-vous ajouter ce que une réponse? b) Est-il un moyen d'ajouter de la colonne EmployeeID l'Adresse dans la table DB sans une Employee de référence dans le Address entité?
  • Je pensais que c'est ce qui est nécessaire pour supprimer tous les Address entités lors de leur correspondant Employee entité est supprimée. Pourriez-vous ajouter ce que une réponse? Merci.

InformationsquelleAutor markvgti | 2015-05-01