Свободное представление извлечения NHibernate без уникального идентификатора - PullRequest
12 голосов
/ 27 мая 2010

Я пытаюсь отобразить представление без идентификатора, но nhibernate по-прежнему генерирует sql со столбцом id (выдает ошибку sql, поскольку столбец ID не существует в БД) Может быть, я неправильно понимаю конструктор Id ()?

комментарии конструктора:

Создать Id, у которого нет соответствующего свойства в доменном объекте, или столбец в базе данных. Это в основном для использования с доступом только для чтения и / или взгляды. По умолчанию используется тождество int с генератором «increment».

public class PersonMapping : ClassMap<Person>
{
    public PersonMapping()
    {
        Table("person");
        ReadOnly();

        Id();
        Map(f => f.Name, "name");
    }
}

Ответы [ 2 ]

8 голосов
/ 17 августа 2010

NHibernate требует ID. Метод doc говорит, что он создает идентификатор, который не имеет соответствующего свойства в вашем доменном объекте, однако у базы данных все еще есть идентификатор.

Если в вашей таблице нет поля для пометки в качестве идентификатора (должен быть уникальным ..), возможно, вы можете попытаться определить некоторые столбцы, которые можно составить в виде составного идентификатора.

Для примера приведена простая таблица ссылок, которая связывает некоторые int с другими int, такими как

A | B
-----
1 | 2
1 | 3
2 | 2

вы можете использовать Composite ID, если все комбинации A / B уникальны.

public PersonMapping()
{
    [...]
     CompositeId()
         .KeyProperty(x => x.A)
         .KeyProperty(x => x.B);
    [...]
}
5 голосов
/ 18 ноября 2010

Вы можете извлекать записи как объекты-значения (неуправляемые объекты) вместо объектов.

" 14.1.5. Возвращение неуправляемых объектов

Возможно применить IResultTransformer к собственным SQL-запросам. Позволяя это, например, вернуть неуправляемые объекты.

sess.CreateSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
    .SetResultTransformer(Transformers.AliasToBean(typeof(CatDTO)))

Указан этот запрос:

  • строка запроса SQL
  • преобразователь результата

Приведенный выше запрос вернет список CatDTO, для которого были созданы экземпляры и введены значения NAME и BIRTHNAME в соответствующие свойства или поля. «

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...