Я использую NHibernate 4.0.0.4000 (с отображением по коду) и SQL Server 2012.NHibernate чтения временной метки столбца из SQL Server
У меня есть доступ к таблицам, которые (среди прочих) содержат timestamp
(в противном случае также известный как rowversion). До сих пор я мог просто игнорировать столбец, не используя его в моем Entity/Mapping.
Теперь я хочу использовать его для просмотра, какие строки изменились с тех пор, как я последний раз проверил таблицу.
Поскольку временная метка может быть заменена только SQL Server, любые операторы INSERT
/UPDATE
, созданные NHibernate, должны игнорировать этот столбец. Я не нашел решения для этой проблемы.
Моя сущность:
public class TblAnwendungsbelegposition {
public virtual int ANWBID { get; set; }
// Other properties cut out for readability
public virtual byte[] upsize_ts { get; set; }
}
Мое отображение:
public class TblAnwendungsbelegpositionMap : ClassMapping<TblAnwendungsbelegposition> {
public TblAnwendungsbelegpositionMap() {
Table("tbl_anwendungsbelegposition");
Schema("dbo");
Lazy(true);
Id(x => x.ANWBID, map => map.Generator(Generators.Identity));
//Other properties cut out for readability
Property(x => x.upsize_ts, map => map.Access(Accessor.ReadOnly));
}
}
Результат этой версии:
Невозможно обновить столбец временной метки
как е rror во время , читающего (об автоматическом Session.Flush()
при закрытии с использованием оператора, обертывающего соединение db).
Когда я извлекаю аксессор в отображении я могу читать без проблем, но когда я вставить новую строку в таблицу, я получаю сообщение
Невозможно вставить явное значение в столбец временной метки. Используйте INSERT со списком столбцов, чтобы исключить столбец timestamp или вставить DEFAULT в столбец timestamp.
Когда я изменить к private set;
, я получаю сообщение во время начальной BuildSessionFactory();
Следующие типы не могут быть использованы в качестве прокси-серверов: PigTool.Entities.TblAnwendungsbelegposition: метод set_upsize_ts должен быть " public/protected virtual 'или' protected internal virtual '
Когда я удаляю от объекта-объекта, я получаю сообщение во время i nitial BuildSessionFactory();
Не удалось найти Присваиватель свойства «upsize_ts» в классе «PigTool.Entities.TblAnwendungsbelegposition»
Кто-нибудь есть идея, как я могу успешно читать строки, содержащие этот столбец только для чтения, в то время как сохраняя способность генерировать новые строки? Я бы предпочел не иметь двух сущностей/сопоставлений в соответствующей таблице, где один не содержит свойство timestamp для повседневной работы и тот, который имеет его, но используется только для чтения.