2017-03-27 5 views
0

Je suis nouveau sur NHibernate et C#, alors soyez gentil!Erreur dans le mappage un-à-plusieurs avec NHibernate

je les deux entités NHibernate suivantes:

public class Client : IEntity 
{ 
    public virtual int Id { get; set; } 

    public virtual IList<Residence> Residences { get; set; } 
} 

Et

public class Residence : IEntity 
{ 
    public virtual int Id { get; set; } 

    public virtual int ClientId { get; set; } 

    public virtual Client Client { get; set; } 
} 

et ils ont un-à-plusieurs de clients Residence (chaque client peut avoir sa résidence multiple dans leur record).

ont cette correspondances avec l'utilisation AutoMapping

public void Override(AutoMapping<Client> mapping) 
{ 
    mapping.Id(c => c.Id).GeneratedBy.Native(); 
    mapping.HasMany(c => c.Residences).KeyColumn("Id").Inverse().Cascade.All(); 
    mapping.Table("Clients"); 
} 

et

public void Override(AutoMapping<Residence> mapping) 
{ 
    mapping.Id(p => p.Id); 
    mapping.References(x => x.Client).Column("Id").Not.Nullable().Cascade.All(); 
    mapping.Table("Residences"); 
} 

Dans mon contrôleur appel IRepository du client:

ClientModel newClient = ClientModel; 

Client DomainModel = AutoMapper.Mapper.Map(newClient, new Client()); 

_clientService.Create(DomainModel); 

Repository:

public class ClientService : IClientService 
{ 
    private readonly IRepository<Client> _clientRepository; 

    public void Create(Client client) 
    { 
     _clientRepository.Create(client); 
    } 
} 

J'ai un problème avec l'utilisation de clé étrangère au client.

Cette erreur: NHibernate.PropertyValueException: propriété non-nulle référence à une valeur nulle ou transitoire ProjectBase.Domain.Entities.Residence.Client

Je pense que cela est parce que vous essayez d'utiliser le client Id ForeignKey qui n'est pas encore ajouté à la table Client. Mais je ne sais pas comment le résoudre. J'ai besoin d'aide pour résoudre cette erreur. Remercier!

+0

Est-ce que le 'client' que vous persistez a des' résidences '? Quelque part, NH a une «résidence» dans son unité de travail qu'il essaye de sauver mais il a un «client» nul. –

+0

oui, j'ai 1 ou plusieurs résidence dans le client quand il donne l'erreur. –

+0

Est-ce que la propriété 'Client' est affectée à la (aux) résidence (s) au client parent? –

Répondre

0

a résolu le problème, la cartographie à changé:

public void Override(AutoMapping<Client> mapping) 
{ 
    mapping.Id(c => c.Id).GeneratedBy.Native(); 
    mapping.HasMany(c => c.Residences).Inverse().Cascade.All(); 
    mapping.Table("Clients"); 
} 

and 

public void Override(AutoMapping<Residence> mapping) 
{ 
    mapping.Id(p => p.Id); 
    mapping.References(x => x.Client) 
} 

et constructeur ajouter dans les clients

public Client() 
{ 
    Residences = new List<Residence>(); 
} 

Ty.