ジミーの列挙型クラスのアイデアに基づいて、コンストラクターを使用して型をインスタンス化するのを避けて(これはで発生していると思いdiscriminator-value
ます)、むしろ「ファクトリメソッド」のような方法でインスタンスをデータベースからマップできるかどうかを確認したいと思います。 。
これが私のタイプです:
public class Impact : Enumeration
{
public static readonly Impact Carbon
= new Impact(1, "Carbon dioxide equivalent", CommonUnit.CO2e);
public static readonly Impact Energy
= new Impact(2, "Energy", CommonUnit.MJ);
public static readonly Impact Cost
= new Impact(3, "Cost", CommonUnit.Dollars);
public Impact(int index, string name, CommonUnit unit)
: base(index, name)
{
this.Unit = unit;
}
public CommonUnit Unit { get; private set; }
}
そしてここにの定義がありますEnumeration
:
public class Enumeration : ValueObject
{
public Enumeration(int index, string displayName)
{
this.Index = index;
this.DisplayName = displayName;
}
public int Index { get; private set; }
public string DisplayName { get; private set; }
public override string ToString()
{
return this.DisplayName;
}
public static IEnumerable<T> GetAllFor<T>() where T : Enumeration
{
foreach (var publicStatic in typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.DeclaredOnly))
{
Enumeration item = null;
item = (Enumeration)publicStatic.GetValue(null);
yield return item as T;
}
}
public static T With<T>(int index) where T : Enumeration
{
return GetAllFor<T>().SingleOrDefault(i => i.Index == index);
}
}
ValueObject
平等機能をカバーするだけです。
他の場所では、静的メソッドを使用してこの列挙型からアイテムを取得します(コアの列挙型静的メソッドを使用する方法のようなものです):
impact = Impact.With<Impact>(index.ImpactId.Value);
これはかなり便利ですが、オブジェクトを再水和するときにNHibernateにもこれを実行させることができるかどうかを知りたいです。
それはどのように行うことができますか?