Nhibernate 使用自定义C#属性选择Fluent约定

Nhibernate 使用自定义C#属性选择Fluent约定,nhibernate,fluent-nhibernate,fluent,custom-attributes,Nhibernate,Fluent Nhibernate,Fluent,Custom Attributes,假设您有一组适用于特定映射组的Fluent约定,但不适用于所有映射组 我的想法是,我将创建可应用于Fluent*Map类的自定义C#属性,并编写通过检查*Map类来确定是否应用了自定义属性的约定 这样,我可以选择一组约定,并通过使用自定义属性[UseShortNamingConvention]等标记它们,将它们应用于各种映射 我是NHibernate的新手(而且很流利,就这一点而言,我是C#)——这种方法可行吗 这是正常的吗?:-) 谢谢 是的!我实际上做了一些类似的事情,但是使用了标记接口(i

假设您有一组适用于特定映射组的Fluent约定,但不适用于所有映射组

我的想法是,我将创建可应用于Fluent*Map类的自定义C#属性,并编写通过检查*Map类来确定是否应用了自定义属性的约定

这样,我可以选择一组约定,并通过使用自定义属性[UseShortNamingConvention]等标记它们,将它们应用于各种映射

我是NHibernate的新手(而且很流利,就这一点而言,我是C#)——这种方法可行吗

这是正常的吗?:-)


谢谢

是的!我实际上做了一些类似的事情,但是使用了标记接口(inotcachable,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();
        }
}

你知道怎么做吗。。。instance.EntityType将为我提供被映射实体的类型-是否有属性将为我提供EntityMapType?