Я пытаюсь отобразить представление без идентификатора, но nhibernate все еще генерирует sql с идентификационным столбцом (предоставление мне ошибка SQL, так как столбец ID не делает существует в дб). Возможно, я неправильно понимаю идентификатор () конструктор?
конструктор комментирует:
Создайте идентификатор, который не имеет соответствующего свойства в объекте области или столбца в базе данных. Это главным образом для использования с доступом только для чтения и/или представлениями. Значения по умолчанию к международным идентификационным данным с "инкрементным" генератором.
public class PersonMapping : ClassMap<Person>
{
public PersonMapping()
{
Table("person");
ReadOnly();
Id();
Map(f => f.Name, "name");
}
}
NHibernate требует ID. Документ метода говорит, что он создает идентификатор, который не имеет соответствующего свойства в вашем доменном объекте, однако в базе данных все еще есть идентификатор.
Если в вашей таблице нет поля, которое можно было бы пометить как идентификатор (должно быть уникальным ...), возможно, вы можете попытаться идентифицировать некоторые столбцы, которые можно составить как составной идентификатор.
Рассмотрим, например, простую таблицу ссылок, которая связывает один 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);
[...]
}