Y a-t-il un moyen de configurer le mappage pour une table qui ne fait pas directement référence à une autre table? En fait, c'est la référence d'une autre table dont j'ai directement une référence.Fluid NHibernate - Mappage de table détaché
C'est ce que j'ai jusqu'à présent, mais je ne suis pas sûr de savoir comment mapper le "LookupValue" dans mon modèle MetaData. Il aurait besoin de mapper à MetaData si [mdd] .DefinitionType est égal à [mdl] .LookupType et [md] .DataValue est égal à [mdl] .LookupKey.
public class MetaData {
public virtual long TableID { get; set; }
public virtual MetaDataDefinition Definition { get; set; }
public virtual int DefinitionID { get; set; }
public virtual String DataValue { get; set; }
public virtual MetaDataLookup LookupValue { get; set; }
public override bool Equals(object obj) { ... }
public over int GetHashCode() { ... }
}
public class MetaDataDefinition {
public virtual long ID { get; set; }
public virtual string DefinitionName { get; set; }
public virtual string DefinitionType { get; set; }
}
public class MetaDataLookup {
public virtual string Type { get; set; }
public virtual string LookupKey { get; set; }
public virtual string LookupValue { get; set; }
public override bool Equals(object obj) { ... }
public over int GetHashCode() { ... }
}
public class MetaDataMap : ClassMap<MetaData> {
public MetaDataMap() {
Table("PPOMetaData");
CompositeId()
.KeyProperty(x => x.TableID, "TableID")
.KeyProperty(x => x.DefinitionID, "DefinitionID");
References(x => x.Defintion, "DefinitionID").Not.LazyLoad().Cascade.All().Fetch.Join();
Map(x => x.TableID);
Map(x => x.DataValue);
}
}
public class MetaDataDefinitionMap : ClassMap<MetaDataDefinition> {
public MetaDataDefinitionMap() {
Table("MetaDataDefinitions");
Id(x => x.ID);
Map(x => x.DefinitionName);
Map(x => x.Type);
}
}
public class MetaDataLookupMap : ClassMap<MetaDataLookup> {
public MetaDataLookupMap() {
CompositeId()
.KeyProperty(x => x.LookupType)
.KeyProperty(x => x.LookupKey);
Map(x => x.LookupValue);
}
}
Idéalement, je veux le faire tourner une requête semblable à ceci:
SELECT data.TableID, data.DefinitionID, def.DefinitionName, data.DataValue,lu.LookupValue AS DataValue
FROM dbo.PPOMetadata AS data
INNER JOIN dbo.MetaDataDefinitions AS def ON def.ID = data.DefinitionID
LEFT OUTER JOIN dbo.MetaDataLookup AS lu ON lu.LookupType = def.Type AND lu.LookupKey = data.DataValue
WHERE data.TableID = 1
En termes de capacité de mise à jour, la seule chose que je pourrais jamais créer, mettre à jour ou supprimer serait dans le MetaData table. Les définitions et les valeurs de recherche ne changeraient jamais (au moins à partir de cette partie de l'application). Le mappage du "MetaDataLookup" directement au modèle MetaData est-il possible? Si oui, quelqu'un peut-il me diriger dans la bonne direction de ce que je devrais regarder?
Merci!