C#NHibernate映射

时间:2011-02-08 21:47:26

标签: c# nhibernate generics fluent-nhibernate mapping

假设我有一些流畅配置的NHibernate设置,它同时使用Fluent mappingsAutomappings

        Configuration = Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.ShowSql().InMemory)
            .Mappings(x =>
                      {
                          x.FluentMappings.AddFromAssemblyOf<RepositoryEntity>();
                          x.AutoMappings.Add(autoPersistenceModel);
                      });

现在 - 是否可以检查某个任意类型T是否已映射(或未映射)到此配置?

我正在尝试制作一些防弹库,我认为这一时刻非常重要。

谢谢

2 个答案:

答案 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