Сессия nHibernate 2.0's использования проблемы. Доберитесь <T> на классе с составным идентификатором

Это не совсем возможно. Целый IO API должен быть повторно реализован. NIO означает неблокирующий ввод / вывод, это не то же самое, что асинхронный ввод / вывод. Неблокирующая реализация реализована в JAVA и вкратце, это означает, что ОС не имеет возможности уведомлять среду выполнения о завершении операции. Isned Java использует системные вызовы select() или poll() для проверки наличия данных.

Я мог бы поговорить об этом, но украденная картинка стоит 100 слов:

enter image description here

Вот почему в JAVA требуется отдельный поток постоянно вызывать check, check, check, check .....

Я не знаю платформу .NET, но если то, что вы опубликовали, правильно, то используется асинхронный ввод-вывод, поэтому последний столбец. Но я не доверяю ничему, что исходит от Microsoft.

Надеюсь, это ответит на ваш вопрос. Также здесь приведен дополнительный материал для чтения: https://stackoverflow.com/a/2625565/8951886

5
задан joshua.ewer 22 January 2009 в 19:57
поделиться

2 ответа

Ну, я ответил на свой собственный вопрос. Я думаю, отправляя Вашу проблему, является почти столь же очистительным как выяснение его с кем-то. Если я должен был сделать составной идентификатор PersonJob компонентом или классом, т.е.

<class name="PersonJob" table="dbo.PersonJob" lazy="true">
    <composite-id name="PersonJobKey" class="PersonJobKey">
      <key-property name="PersonId"></key-property>
      <key-property name="JobId"></key-property>
    </composite-id>
</class>

Затем я могу просто сделать это:

PersonJobKey key = new PersonJobKey() { PersonId = 1, JobId = 1 };  
PersonJob obj = Session.Get<PersonJob>(key);  
int yearsOfEmployment = obj.YearsOfEmployment;

круто. надежда это помогает кому-либо еще понимающему это...

8
ответ дан 13 December 2019 в 19:37
поделиться

Спасибо за регистрацию ответа выше, я смотрел на него против объекта, который я отобразил, где составной ключ не имеет имени или класса. Когда я пытался делать класс для представления составного ключа, он изменил способ, которым вел себя объект при использовании другим кодом. Также я хотел записать что-то как;

Session.Get<SalesRepArea>(new { AreaCode = "ACode", RegionCode = "RCode"});

Я нашел, что nHibernate не мог иметь большого смысла анонимного объекта, но я понял, что мне не нужно название моего составного ключа или тип класса. То, что Получают nHibernate, метод после, на самом деле, является временным объектом так, чтобы это могло добраться, это - эквивалентный объект от базы данных (должен быть то, почему необходимо переопределить, равняется методу в классе C#, чтобы заставить составной ключ работать). Таким образом для следующей карты

<class name="SalesRepArea">
   <composite-id>
      <key-property 
         name="AreaCode" column="AreaCode" type="String" length="12" />
      <key-property 
         name="RegionCode" column="RegionCode" type="String" length="12" />
   </composite-id>

Я пишу немного меньше кода и обхожусь без объекта, представляющего ключ для получения

SalesRepArea myArea = Session.Get<SalesRepArea>(
   new SalesRepArea()
   { 
      AreaCode = "ACode", 
      RegionCode = "RCode" 
   }
);

Я не говорю, что именованный ключевой метод плох, меньше кода не всегда лучше, он должен только показать, что это В спящем режиме, ищет объект, что ключ находится в получить конкретный объект от базы данных.

Если у меня есть он неправильно сообщенный мне, но я надеюсь, что это помогает, поскольку я испытывал немного затруднений из-за этого.

Спасибо,

Mark

3
ответ дан 13 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: