Quelqu'un peut-il m'aider à trouver la meilleure façon de mapper la situation suivante dans nHibernate? La classe Address est utilisée à la fois dans le client et dans la société. Comment puis-je le stocker le plus efficace en SQL? Et à quoi devrait ressembler la cartographie? J'ai pensé à plusieurs options, mais je ne suis pas assez d'expérience avec NHibernate pour ces situations:nHibernate mapping pour l'entité à plusieurs entités parentes (par exemple, Addres -> Firm, Addres -> Client)
utilisation 1 entité d'adresse et 1 table et utiliser une colonne de dénominateur pour distinguer entre l'adresse pour le client et l'adresse de l'entreprise -> comment l'implémenter dans nHibernate?
utilisation 1 entité d'adresses et 2 tables (ClientAddresses et CompanyAddresses) -> mais je ne peux définir 1 table dans le mappage de la classe Adresse
utilisation 2 entités d'adresse et 2 tables -> non si élégant
Je viens de tomber sur ce problème lorsque j'ai commencé à implémenter la classe entreprise et j'ai réalisé qu'il avait aussi besoin de plusieurs adresses. Jusqu'à présent, j'avais une classe d'adresses et de clients et j'avais une correspondance un-à-plusieurs entre eux. Dans la base de données, l'adresse contenait une colonne supplémentaire appelée ClientId. Mais avec l'introduction de la classe Company je suis coincé ...
Toute aide serait grandement appréciée.
Je travaille actuellement dans le cadre sharparch 1.5, qui utilise AutoMapping et mes fichiers de mappage sont comme ceci:
public class AddressMap : IAutoMappingOverride<Address>
{
public void Override(AutoMapping<Address> mapping)
{
mapping.Table("addresses");
mapping.Id(x => x.Id, "AddressGuid")
.UnsavedValue(Guid.Empty)
.GeneratedBy.GuidComb();
mapping.References(x => x.Client, "ClientGuid");
}
}
Ci-dessous un peu plus de code l'illustrent le problème:
Adresse
public class Address
{
public virtual string StreetLine1 { get; set; }
public virtual string StreetLine2 { get; set; }
public virtual string PostalCode { get; set; }
public virtual string City { get; set; }
public virtual string Country { get; set; }
}
qui a le tableau suivant:
tablename = adresses
champs = AddressGuid, StreetLine1, StreetLine2, PostalCode, Ville, Pays
client
public class Client
{
public IList<Address> Addresses {get;set;}
}
Société
public class Company
{
public IList<Address> Addresses {get;set;}
}
Malheureusement j'ai exactement le même problème. Voyons voir si nous pouvons obtenir des conseils. – mhenrixon