2009-07-29 6 views
3

Je travaille sur mon premier projet NHibernate, donc cela peut sembler être une question simple.Comment enregistrer une entité avec NHibernate qui est composée d'autres types complexes, mais je n'ai que l'ID des autres types complexes

Ci-dessous est simplifié de mon scénario réel pour transmettre la question spécifique.

Disons que j'ai une entité client

public class Customer 
{ 
    prop virtual int ID { get; set; } 
    prop virtual string Name { get; set; } 
    prop virtual Region Region { get; set; } 
} 

et mon entité Région (régions sont comme, NorthWest, MidWest, etc - une liste assez définie qui serait dans une sorte de chute vers le bas)

public class Region 
{ 
    prop virtual int ID { get; set; } 
    prop virtual string Name { get; set; } 
    private readonly IList<Customer> _customers = new List<Customer>(); 

    public virtual void Add(Customer customer) 
    { 
     _customers.Add(customer); 
    } 

    public virtual void Remove(Customer customer) 
    { 
     _customers.Remove(customer); 
    } 

    public virtual Customer[] GetCustomers() 
    { 
     return _customers.ToArray(); 
    } 
} 

Quand je vais Persister une entité client, je veux vraiment que d'avoir 3 éléments d'information (customer.id, Customer.Name, & Customer.Region.ID), comment dois-je accomplir cela, parce que NHibernate attend une entité Client qui inclut une entité Région complète (non juste l'ID) ...

Répondre

6

Vous pouvez utiliser Load pour obtenir la région par ID sans cliquer sur la base de données. Cela vous donnera une entité que NHibernate reconnaîtra et vous permettra de conserver sans l'appel de base de données supplémentaire.

Reference

0

Je pense que si vous avez déjà l'ID de la région, il vous suffit d'attribuer cet identifiant à un nouvel objet Région et le joindre à votre nouveau client. Tant que vous ne disposez pas de l'attribut de cascade pour cette association dans le mappage client défini sur "all" ou "update" (qui mettrait en effet à jour les données de la région existante dans la base de données), il attachera la région donnée au nouveau client.

Questions connexes