1

マッピングの特定のグループに適用されるが、すべてではないFluent規則のセットがあるとします。

ここでの私の考えは、Fluent * Mapクラスに適用できるカスタムC#属性を作成し、* Mapクラスを調べてカスタム属性が適用されているかどうかを確認することにより、受け入れを決定する規則を作成することでした。

そうすれば、規則のグループを選択して、カスタム属性([UseShortNamingConvention]など)でタグ付けするだけで、さまざまなマッピングに適用できます。

私はNHibernate(およびFluent、さらに言えばC#)を初めて使用します-このアプローチは可能ですか?

そして、それは正気ですか?:-)

ありがとう!

4

1 に答える 1

2

はい、そうです!私は実際に似たようなことをしましたが、代わりにマーカーインターフェイス(INotCacheable、IComponent)を使用しましたが、マーカーインターフェイスまたは属性はそれほど大きな違いではないはずです。

規則を適用するときは、属性の存在を確認してください:)

編集:

いくつかのコードサンプルを追加する

    public class MyMappingConventions : IReferenceConvention, IClassConvention
    {
        public void Apply(IOneToManyCollectionInstance instance)
        {
            instance.Key.Column(instance.EntityType.Name + "ID");
            instance.LazyLoad();
            instance.Inverse();
            instance.Cascade.SaveUpdate();

            if ((typeof(INotCacheable).IsAssignableFrom(instance.Relationship.Class.GetUnderlyingSystemType())))
                return;

            instance.Cache.ReadWrite();
        }

        public void Apply(IClassInstance instance)
        {
            instance.Table(instance.EntityType.Name + "s");
            //If inheriting from IIMutable make it readonly
            if ((typeof(IImmutable).IsAssignableFrom(instance.EntityType)))
                instance.ReadOnly();

            //If not cacheable
            if ((typeof(INotCacheable).IsAssignableFrom(instance.EntityType)))
                return;

            instance.Cache.ReadWrite();
        }
}
于 2010-07-13T21:02:48.527 に答える