我有一个从通用实现继承的存储库类:
public namespace RepositoryImplementation {
public class PersonRepository : Web.Generics.GenericNHibernateRepository<Person>
}
通用存储库实现使用 Fluent NHibernate 约定。他们工作正常。这些约定之一是所有属性都不能为空。
现在我需要定义特定属性可能在约定之外可以为空。Fluent NHibernate 有一个有趣的覆盖机制:
public namespace RepositoryImplementation {
public class PersonMappingOverride : IAutoMappingOverride<Person> {
public void Override(FluentNHibernate.Automapping.AutoMapping<Funcionario> mapping)
{
mapping.Map(x => x.PhoneNumber).Nullable();
}
}
}
现在我需要将覆盖类注册到 Fluent NHibernate 中。Web.Generics.GenericNHibernateRepository
我在泛型类中有以下代码:
AutoMap.AssemblyOf<Person>()
.Where(type => type.Namespace == "Entities")
.UseOverridesFromAssemblyOf<PersonMappingOverride>();
问题是:UseOverridesFromAssemblyOf
是一种通用方法,我不能这样做:
.UseOverridesFromAssemblyOf<PersonMappingOverride>();
因为那会导致循环引用。我不希望通用存储库知道存储库或映射覆盖类,因为它们因项目而异。
我看到了另一个解决方案:在 GenericNHibernateRepository 类中,我可以这样做。GetType() 并获取存储库实现类型(例如:PersonRepository)。但是我不能调用UseOverridesFromAssemblyOf()
传递类型。
在 FluentNHibernate 中是否有另一种配置覆盖的方法?如果不是,我怎么能调用UseOverridesFromAssemblyOf<T>
而不使通用存储库依赖于存储库实现或映射覆盖类?
(来源:http ://wiki.fluentnhibernate.org/Auto_mapping#Overrides )