2010-03-15 5 views
1

Im делает проект с winforms C#. Этот проект состоит из:Настройка nHibernate для решения с несколькими проектами

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

  • Проект Клиент: Windows Forms, где пользователь будет вызывать операции CRUD;
  • Серверный проект;
  • Общий проект: Этот проект будет содержать модели (на изображении будет только элемент модели);
  • Проект ListSingleton: Удаленный объект, который будет выполнять операции над моделями;

Im пытается использовать стиль 3 слоев, в которых клиент и сервер будет являться просмотров слой, то LISTSINGLETON будет контроллер уровня (где все объекты создаются) и COMMON проект модели ...

У меня уже есть все коммуникации, но теперь мне нужно работать над сохранением данных в базе данных 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? Altho я имел ссылку на общий проект в ListSingleton я получаю ошибку в addXml линии ...


  • И когда у меня есть 2 проектов одна с моделями & отображения и другой, где плохое использование гибернации (это проект имеет ссылку на проект моделей), как я могу сделать «cfg.AddXmlFile (« User.hbm.xml »); Я продолжаю получать «Не могу настроить хранилище данных из файла User.hbm.xml» Когда я использую эту 2-ю структуру проекта.

Мое отображение является правильным, потому что я пытался с раствором одного проекта, и она работала: X

ответ

0

Ну я узнал ответы на мои вопросы

В какой проект я держать отображение? Общий проект?

Как сказал Джейми Иде, да, это должно быть в слое моделей.

В какой проект я сохранить файл конфигурации спящего режима (App.config)? Проект ListSingleton?

В какой проект я делаю это:

Этот файл конфигурации и все настройки спящего режима должны быть в слое контроллера, поэтому его в проекте ListSingleton;

И когда у меня есть 2 проектов один с модели & отображения и другой где плохо использовать в спящем режиме (это проект имеет ссылку на модель проекта), как я делаю «cfg.AddXmlFile ("User.hbm.xml");» I keep geting «Не удалось настроить datastore из файла User.hbm.xml« Когда я использую эту 2 проектную структуру.

Вы должны сконфигурировать файл сопоставления как встроенный ресурс и копию, если он новее в пропиантах.

2

В какой проект я продолжаю отображение? Общий проект?

Да. Файлы сопоставления должны быть в том же проекте, что и модели.

В каком проекте я сохраняю конфигурационный файл hibernate (App.config)? Проект ListSingleton?

В проекте клиента. Я предполагаю, что клиентский проект передаст объекты в ListSingleton, который будет действовать на них.

В какой проект я делаю это:

В проекте клиента. Я хочу отметить, что вы должны только создать ISessionFactory один раз.

+0

+1 И я хотел бы настаивать на ISessionFactory, это ДОЛЖНО быть синглом в вашем приложении, так как это чрезвычайно дорого для создания экземпляра. –

+0

Я пытаюсь использовать стиль трех слоев, в котором клиент и серверы будут уровнем ** просмотров **, listSingleton будет уровнем ** контроллера ** (там, где созданы все объекты), а общий проект - это ** models layer ** ... Итак, с этой новой информацией вы думаете, что я должен сохранить файл конфигурации и создать Session @ Client? PS: Извините, я забыл добавить эту информацию к вопросу ... – Canastro

+0

Не знаю, я никогда не делал ничего подобного. Я бы сделал это в слое, который отвечает за раздачу ISessions. ISession является сериализуемым, поэтому вы можете сделать это как на клиенте, так и на контроллере. –