2015-01-28 2 views
0

Все примеры, которые я видел для NHibernate.Envers, используют целое число как идентификатор объекта. Вместо этого я хотел бы использовать Guid. Это возможно?NHibernate Envers - используйте Guid как Id вместо Int

[Audited] 
public class Person 
{ 
    public virtual Guid Id { get; set; } 
    public virtual String FirstName { get; set; } 
    public virtual String LastName { get; set; } 
    public virtual int Age { get; set; } 
    public virtual Address.Address Address { get; set; } 
} 

Я спрашиваю, потому что я вижу исключение при попытке сохранить данные REV:

[Sql String]: INSERT INTO REVINFO (REVTSTMP) VALUES (?); select SCOPE_IDENTITY() 

{"Cannot insert the value NULL into column 'REV', table 'Auditing.dbo.REVINFO'; 
    column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."} 

Мой объект пересмотра данных имеет идентификатор 0.

ответ

1

Да, ваши entites может имеют практически любой тип id (поддерживаемый NHibernate Core). Однако объект ревизии должен иметь число.

О вашем исключении ... Скорее всего, что-то не так с вашей ревизионной сущностью и/или ее отображением. Читайте документы здесь, http://envers.bitbucket.org/#revisionlog.

+0

Спасибо, Роджер, я смог заставить его работать вчера. Итак, нет способа сделать 'REV' на' REVINFO' 'Guid'? У меня есть проблемы с использованием 'int' или даже' bigint', потому что в конце концов они переполняются. – gwin003

+0

Envers использует это поле для множества внутренних запросов, таких как «идентификатор ревизии больше ...», «идентификатор ревизии между ...», например, при чтении отношений. – Roger

+0

... так что нет, я не думаю, что можно «решить». Короче говоря, каждая ревизия должна иметь уникальную ценность som, которая «сопоставима». – Roger

Смежные вопросы