我有一個庫類,它從通用實現繼承:FluentNHibernate覆蓋:UseOverridesFromAssemblyOf非通用版本
public namespace RepositoryImplementation {
public class PersonRepository : Web.Generics.GenericNHibernateRepository<Person>
}
通用庫實現使用功能NHibernate約定。他們工作正常。其中一個慣例是所有財產都不可空。
現在我需要定義特定的屬性可以在約定之外爲空。功能NHibernate有一個有趣的替代機制:
public namespace RepositoryImplementation {
public class PersonMappingOverride : IAutoMappingOverride<Person> {
public void Override(FluentNHibernate.Automapping.AutoMapping<Funcionario> mapping)
{
mapping.Map(x => x.PhoneNumber).Nullable();
}
}
}
現在我需要的覆蓋類註冊到功能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)
它的工作就像一個魅力:) 非常感謝的方式! – ThiagoAlves 2010-04-14 14:21:41