2011-02-08 272 views
0

比方說,我已經有一些流利配置的NHibernate設置,它使用Fluent mappingsAutomappingsC#NHibernate映射

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

現在 - 這可能檢查一些任意類型T映射(或不映射),以這種配置?

我試圖做出一些防彈庫,我認爲這一刻是至關重要的。

謝謝

回答

4

是的。創建的SessionFactory後,保持配置周圍,並設置了這種方法在你的資料庫:

public bool IsMapped (Type testType) 
{ 
    return MyConfiguration.ClassMappings.Any(m => m.EntityName == testType.FullName); 
} 

AFAIK這可以用來檢測兩個fluently-和XML映射類。如果您在不同命名空間中使用類似命名的類,則可能需要進行更加密切的比較,但這應該讓您開始。

你也可以在開發一個「防彈」Repo中使用的東西是EntityNotFoundDelegate,它允許你定義一個自定義方法來處理給沒有映射的存儲庫的實體。如果可以處理實體,您可以使用它來詢問另一個存儲庫,或者將其還原爲可能有幾個可能的回購嘗試的策略模式。