假设我有一些流畅配置的NHibernate
设置,它同时使用Fluent mappings
和Automappings
。
Configuration = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.ShowSql().InMemory)
.Mappings(x =>
{
x.FluentMappings.AddFromAssemblyOf<RepositoryEntity>();
x.AutoMappings.Add(autoPersistenceModel);
});
现在 - 是否可以检查某个任意类型T
是否已映射(或未映射)到此配置?
我正在尝试制作一些防弹库,我认为这一时刻非常重要。
谢谢
答案 0 :(得分:4)
是。创建SessionFactory后,请保持配置,并在存储库中设置此方法:
public bool IsMapped (Type testType)
{
return MyConfiguration.ClassMappings.Any(m => m.EntityName == testType.FullName);
}
AFAIK这可用于检测流式和XML映射的类。如果你在不同的命名空间中有类似命名的类,你可能需要更密切地比较,但这应该让你开始。
你可以在开发“防弹”Repo时使用的东西是EntityNotFoundDelegate,它允许你定义一个自定义方法来处理给它没有映射的存储库的实体。您可以使用此方法来询问另一个存储库是否可以处理该实体,或者将其重新启动到可能有几个可能的存储库来尝试的策略模式。
答案 1 :(得分:0)
Keith已经回答了你的问题,但是为了更加防弹,你可以查看PersistenceSpecification类。 (它需要T型知识)
http://www.packtpub.com/article/using-fluent-nhibernate-persistence-tester-and-ghostbusters-test