2010-06-03 64 views
0

所有功能NHibernate的事例,例如(或類似)電話:流利NHibernate的外部配置

c.AddMappingsFromAssembly(typeof(Product).Assembly); 

我不想塗用「的typeof(產品).Assembly」,因爲我不希望有參考我的域名項目(「Procuct」課程)。在普通的NHibernate的,我只想創造的hbm.xml文件,並在web.config中輸入以下內容:

<mapping assembly="TestingFluentHN"/> 

但此項不與FluentNHibernate工作。在我的會話建立方法中提供程序集是否有一種優雅的方式?最好從配置文件。

資源: 上下文有害代碼/依賴性:

static NHSessionManager() 
{ 
    Configuration c = new Configuration(); 
    //change following to sth that does not need refernce to domain 
    c.AddMappingsFromAssembly(typeof(Product).Assembly); 
    c.Configure();  
    sessionFactory = c.BuildSessionFactory(); 
} 

我的第一個想法是讀取的appSettings組件的名稱和加載它們:

var assembliesToMap = new List<string>(); 
foreach (var assemblyName in assembliesToMap) 
{ 
    var assembly = Assembly.LoadFile(assemblyName); 
    c.AddMappingsFromAssembly(assembly); 
} 

但是這是我的最後一個選項。我正在尋找流利的nhibernate。

回答

1

我不知道什麼內置流利的nhibernate會做你想做的。您可能需要使用您在問題末尾列出的方法。

我不確定如果我只是沒有弄清楚你的應用程序是如何佈局的,但整個想法似乎有點誤導。無論如何,您需要依賴域對象來查詢會話,並且這可能與會話工廠的創建在同一個程序集中。如果沒有,您可以考慮使用依賴注入來提供會話管理器(從知道域對象的項目)。

如果我錯過了什麼,請讓我知道。

+0

嗯,我做了更多的研究,我查看了Sharp Architecure的代碼,看看人們是怎麼做到的,而且我還沒有找到web.config/app.config的方式。正如你寫的,我最終注入了一個接口,該接口有方法將所有帶有映射的程序集返回到我的核心項目中。關於你對整個想法的懷疑:): 有(和其他項目一樣)核心,和「我們的框架」(例如通用數據訪問的可重用部分 - 我想用於解決方案的項目)。 「我們的框架」涉及需要繪圖的NH,但這些核心是核心。 「out framework」當然不能依賴於Core。 – 2010-06-08 22:46:53

+0

p.s.夏普建築師們以類似的方式來做這件事。項目依賴於尖銳的體系結構,通過映射傳遞程序集名稱數組。 - > NH是在尖銳的建築內,entites在項目中使用尖銳的拱門。感謝您的回覆。 – 2010-06-08 22:49:26

+0

我想這就是你要找的東西 - 有時候你只是需要你想找的那個詞。真高興你做到了! – AlexCuse 2010-06-09 01:18:02