2012-12-05 3 views
0
나는 다음과 같은 수업을

로 저장.NHibernate에 서브 클래스는 메타 데이터

내가하고 싶은 것은 내 하위 클래스의 모든 속성을 메타 데이터로 저장하는 것입니다. 나는 그것을 serialize하고 xml로 저장하기를 원하기 때문에 각각 하나의 테이블을 가지지 않고 원하는만큼 많은 하위 클래스를 가질 수 있으며 많은 열을 사용하지 않아도된다.

감사합니다.

+0

당신은 그 의미를 알고 있습니까? 쿼리는 거의 불가능할 것이고 이해와 디버깅은 훨씬 더 어려울 것입니다. 서로 다른 하위 클래스의 열을 다시 사용하면 훨씬 효율적이고 이해하기가 더 수월 할 것입니다. – Firo

+0

네, 그 의미를 이해합니다. 내 목적은 내가 직렬화 한 속성을 쿼리하는 것이 아니라 매개 변수 일뿐입니다. – Itori

답변

0
<subclass name="Foo" discriminator-value="MoveFile"> 
    <property name="SerialisedProps" column="serialisedProps" access="Name.Space.FakeAccessor, Asse" /> 
</subclass> 

class FakeAccessor : IPropertyAccessor, IGetter, ISetter 
{ 
    public IGetter GetGetter(string name) 
    { 
     return this; 
    } 

    public ISetter GetSetter(string name) 
    { 
     return this; 
    } 

    public bool CanAccessThroughReflectionOptimizer { get { return false; } } 

    public object Get(object target) 
    { 
     return Serialize(target); 
    } 
    object GetForInsert(object owner, IDictionary mergeMap, ISessionImplementor session) 
    { 
     return Get(owner); 
    } 

    public void Set(object target, object value) 
    { 
     // deserialize xml and set appropriate properties 
    } 

    Type ReturnType { get { return typeof(string); } } 

    string PropertyName { get { return "SerialisedProps"; } } 

    private string Serialize(object subclass) 
    { 
     // example implementation 
     var type = subclass.GetType(); 
     var root = new XElement(type.Name); 
     foreach (var prop in type.GetProperties()) 
     { 
      root.Add(new XElement("property", new XAttribute("name", prop.name), new XAttribute("value", prop.GetValue(subclass, null) + "")); 
     } 
     return root.ToString(); 
    } 
} 
+0

꽤 멋진 것 같습니다. 그것을 시도 할; – Itori

+0

나는 그것을 작동시킬 수있다. tyvm. – Itori