Nous utilisons FluentNHibernate et nous avons rencontré un problème où notre modèle d'objet nécessite des données de deux tables comme ceci:FluentNHibernate, obtenir une colonne d'une autre table
public class MyModel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int FooId { get; set; }
public virtual string FooName { get; set; }
}
Là où il y a une table de MyModel qui a Id, Name et FooId en tant que clé étrangère dans la table Foo. Les tables Foo contient Id et FooName.
Ce problème est très similaire à un autre article ici: Nhibernate: join tables and get single column from other table mais j'essaie de comprendre comment le faire avec FluentNHibernate.
Je peux créer facilement l'ID, le nom et le FooId ... mais ma correspondance avec FooName me pose problème. Ceci est ma carte de classe:
public class MyModelClassMap : ClassMap<MyModel>
{
public MyModelClassMap()
{
this.Id(a => a.Id).Column("AccountId").GeneratedBy.Identity();
this.Map(a => a.Name);
this.Map(a => a.FooId);
// my attempt to map FooName but it doesn't work
this.Join("Foo", join => join.KeyColumn("FooId").Map(a => a.FooName));
}
}
avec cette cartographie je reçois cette erreur:
L'élément « classe » dans l'espace de noms « urn: NHibernate-mapping-2.2 » a un élément enfant invalide « rejoindre » dans l'espace de noms 'urn: nhibernate-mapping-2.2'. Liste des éléments attendus: 'jointed-subclass, loader, sql-insert, sql-update, sql-delete, filtre, resultset, query, sql-query' dans l'espace de noms 'urn: nhibernate-mapping-2.2'.
des idées?
Ouais voilà comment je traditionnellement le faire, parce que, en substance, est ce qui devrait être modélisé (d'autant plus que la DB est configuré de cette manière) Cependant, mon exigence (qui vient de ci-dessus) ne veut pas le faire de cette façon .... Aussi, c'est une simplification du problème réel pour le bien de la discussion. Le problème REAL est que si nous l'avons fait comme vous l'avez suggéré, la classe Foo aurait une propriété de type Foo2, et la classe Bar aurait une propriété de type Foo2 ... etc etc Cela signifie avoir un tas de choses inutiles rejoint/sous-sélectionne quand tout ce dont j'avais besoin était cette propriété ... – puffpio