2011-02-07 7 views
0

データベースに格納できず、シリアル化できない別のクラスにマップされているクラスのプロパティがあります。状態パターンを実装します。 は、だから私はこのようなものを持っている:私は2つの異なる状態、私は例えば、使用して達成することができ、現在の状態の名前を永続化する必要があるデータベースでNHibernate Mapクラスの名前をReflectionで解決します

public class LockedState : IState ... 

public class UnlockedState : IState ... 

を持って

public IState MyState { get; set; } 

string name = myState.GetType().Name; 

カスタムIUserStateを作成する必要がありますか、それとも周囲に何かありますか?私は次のようにカスタムIUserTypeを実装しなければならなかったことを行うために

答えて

0

public sealed class StateMapper : IUserType 

// get 
public object NullSafeGet(IDataReader rs, string[] names, object owner) 
{ 
string objectName = (string)NHibernateUtil.String.NullSafeGet(rs, names[0]); 
Type stateType = Type.GetType(objectName, false, true); 
if (stateType == null) 
{ 
    return null; 
} 
// StateFacility is used by my code to create a new Type 
return StateFacility.CreateState(stateType); 
} 

// set 
public void NullSafeSet(IDbCommand cmd, object value, int index) 
{ 
if (value == null) 
{ 
    NHibernateUtil.String.NullSafeSet(cmd, null, index); 
    return; 
} 
    NHibernateUtil.String.NullSafeSet(cmd, value, index); 
} 
関連する問題