2010-03-15 78 views
1

我正在用C#winforms做一個項目。這個項目是由組成:爲多項目解決方案配置nHibernate

alt text http://img139.imageshack.us/img139/2540/esquemaw.png

  • Client項目: Windows窗體,其中用戶將調用CRUD操作;
  • 服務器項目;
  • 共同項目:該項目將舉行模型(在圖像中只有模型項目);
  • ListSingleton項目:遠程對象,將執行模型上的操作;

林試圖用一個3層式,其中客戶端和服務器將是觀點層,所述LISTSINGLETON將是控制器層(其中被創建的所有對象),以及共同的項目是模型層 ...

我已經有了所有的通信工作,但現在我需要在mysql數據庫中處理數據的持久性。我正在嘗試使用nHibernate,但我遇到了一些麻煩。

我的主要問題是如何組織我的休眠配置。 - 我在哪個項目中保存映射?共同的項目?

  • 在哪個項目中保留hibernate配置文件(App.config)? ListSingleton項目?

  • 在哪個項目我這樣做:

    Configuration cfg = new Configuration(); 
        cfg.AddXmlFile("Item.hbm.xml"); 
        ISessionFactory factory = cfg.BuildSessionFactory(); 
        ISession session = factory.OpenSession(); 
        ITransaction transaction = session.BeginTransaction(); 
    
        Item newItem = new Item("BLAA"); 
    
        // Tell NHibernate that this object should be saved 
        session.Save(newItem); 
    
        // commit all of the changes to the DB and close the ISession 
        transaction.Commit(); 
        session.Close(); 
    

在ListSingleton項目?本書雖然我曾在我一直在addXml線得到錯誤的ListSingleton參照共同的項目...


  • 當我有2個項目,一個與模型&映射而另一種病使用Hibernate(此項目有模型項目的參考),我該如何做「cfg.AddXmlFile(」User.hbm.xml「);」我一直在創建「無法從文件User.hbm.xml配置數據存儲」當我使用這2個項目結構。

我的映射是正確的,因爲我想用一個項目解決方案,它的工作:X

回答

0

嗯,我找到了答案,我的問題

在哪個項目我保持 映射?共同的項目?

正如Jamie Ide所說,是的它應該在模型層。

我在哪個項目中保留 休眠配置文件 (App.config)? ListSingleton項目?

在哪個項目我這樣做:

此配置文件和所有Hibernate的配置應該是在控制層,因此其在ListSingleton項目;

當我有2個項目之一與 模型&映射和另一 哪裏生病使用Hibernate(這 項目有模型參考 項目),我該怎麼辦 「cfg.AddXmlFile ( 「User.hbm.xml」);」我 保持geting「無法從文件User.hbm.xml配置 數據存儲」當我使用這2項目結構 。

您應該將映射文件配置爲嵌入式資源並在屬性更新時將其複製。

2

在哪個項目我保持映射?共同的項目?

是的。映射文件應與模型在同一個項目中。

在哪個項目中保留hibernate配置文件(App.config)? ListSingleton項目?

在客戶端項目中。我假設客戶端項目會將對象傳遞給ListSingleton,這將對它們起作用。

在哪個項目我這樣做:

在客戶端項目。我想指出你應該只創建一次ISessionFactory。

+0

+1我想堅持ISessionFactory,它必須是整個應用程序中的一個單例,因爲實例化的代價非常高。 – 2010-03-16 14:01:23

+0

我試圖使用3層風格,其中客戶端和服務器將**視圖層**,listSingleton將**控制器層**(其中所有對象都創建),並且通用項目是** models layer ** ...因此,有了這些新信息,您認爲我應該保留配置文件並創建Session @ Client? PS:對不起,我忘了將此信息添加到問題中... – Canastro 2010-03-16 14:16:19

+0

我不知道,我從來沒有做過這樣的事情。我會在負責分發ISessions的層中執行此操作。 ISession是可序列化的,因此您可以在客戶端或控制器中執行此操作。 – 2010-03-16 15:36:11