別のテーブルへの直接参照を持たないテーブルのマッピングを設定する方法はありますか?それは実際には別のテーブルからの参照を取得しますが、そこからの直接参照があります。流暢NHibernate - 分離テーブルマッピング
これは私がこれまで行ってきたことですが、私のメタデータモデルで "LookupValue"をどのようにマップするかはわかりません。 [mdd] .DefinitionTypeが[mdl] .LookupTypeに等しく、[md] .DataValueが[mdl] .LookupKeyに等しい場合は、MetaDataにマップする必要があります。
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);
}
}
理想的には、私はそれは次のようなクエリを実行したい:更新能力の面では
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
を、私が今まで作成、更新または削除でしょう唯一のことは、メタデータになります表。定義と参照値は決して変更されません(少なくともアプリケーションのこの部分から)。 "MetaDataLookup"を直接MetaDataモデルにマッピングできますか?もしそうなら、誰かが私が見ているべきものの正しい方向に向けることができますか?
ありがとうございます!