データベースには、スーパークラスとサブクラスのデータを格納する 2 つのテーブルがあります。ただし、私のアプリケーションでは、2 つの間に中間クラスがあり、そのデータは最下位のサブクラスからロードされます...
abstract public class TierSettings
{
public Guid id { get; set; }
public string SomeTierSetting { get; set; }
}
abstract public class PricingStrategy : TierSettings
{
public string StrategySetting1 { get; set; }
public string StrategySetting2 { get; set; }
}
public class FirstPricingStrategy : PricingStrategy
{
public PricingStrategyType Strategy { get { return PricingStrategyType.Strategy1; } }
public Decimal Value { get; set; }
}
public class SecondPricingStrategy : PricingStrategy
{
public PricingStrategyType Strategy { get { return PricingStrategyType.Strategy2; } }
public Decimal Value { get; set; }
}
私のデータベースには、2 つのテーブルしかありません。
TierSettings(
Id Guid Primary Key,
SomeTierSetting NVarChar(100)
)
PricingStrategies(
Id Guid Primary Key, Foreign Key References Parent(Id),
StrategySetting1 NVarChar(100),
StrategySetting2 NVarChar(100),
StrategyType Int,
Value Float
)
hbm.xml ファイルで関係をマッピングする際に問題があります。個々の PricingStrategy クラスを Tier の拡張としてマップすると、StrategySetting プロパティにアクセスできなくなりますが、PricingStrategy クラスはデータベースに直接マップされません。
次のようなクエリを実行できる必要があります。
var items = from items in session.Query<TierSettings>() select item;
foreach(var item in items)
{
Console.WriteLine(item.Value);
}
それに応じてマッピングファイルを構成するにはどうすればよいですか?