2012-03-26 20 views
0

おすすめの例もちろんたくさんありますNHibernateクラスのマッピングを調べて、どのエンティティが別のエンティティを参照できるかを調べるにはどうすればよいですか?

A - property member X 
B - field member XList 

:NHibernateは(またはFluentNHibernate)の設定(またはFluentConfiguration)などのオブジェクトと出力何かを受け入れるだろう、私はコードを探しています

public class A 
{ 
    internal int Id { get; private set; } 

    public X X { get; set; } 

    internal class Map : ClassMap<A> 
    { 
     public Map() 
     { 
      Id(x => x.Id); 
      References(x => x.X); 
     } 
    } 
} 

public class B 
{ 
    internal int Id { get; private set; } 

    private IList<X> XList; 

    internal class Map : ClassMap<B> 
    { 
     public Map() 
     { 
      Id(x => x.Id); 
      HasMany(x => x.XList) 
       .Access.Field(); 

     } 
    } 
} 


public class X 
{ 
    protected internal virtual int Id { get; private set; } 

    internal class Map : ClassMap<X> 
    { 
     public Map() 
     { 
      Id(x => x.Id); 
     } 
    } 
} 

:私はこれらのマッピングを持っていると仮定私は、サブクラスのマッピング、三項関係、コンポーネントのマッピングなどを考慮していないが、私が探しているのは、データベースに格納されたときに、あるエンティティが別のエンティティを参照する可能性があるすべての場所のリストです。

私はConfiguration.ClassMappingsクラスを見ようとしましたが、NHibernate.Mapping.RootClassは非常にモンスターであり、かなり紛失しました。誰もこれを行う方法についての指針を持っていますか?(NHibernateのマッピングコードに苦労しなくてもかまわない)。

答えて

1

AFAIKを使ってここに行く方法です。

var propertiesWithX = config.ClassMappings 
    .SelectMany(clazz => clazz.PropertyClosureIterator) 
    .Where(prop => prop.PropertyType == typeof(X) || IsCollectionOfTypeX(prop)); 
関連する問題