Не работает свойство версии NHibernate - PullRequest
0 голосов
/ 17 февраля 2012

Используя Sharp Architecture / Fluent NHibernate, я установил свойство Versionint) для своего класса, однако даже при корректном обновлении его объектов обновляется номер версии, не выдается ошибка и версиив основном объединяются, а не выдают исключение.

public class MyClassMap : IAutoMappingOverride<MyClass>
{
    public void Override(AutoMapping<MyClass> mapping)
    {
        mapping.Version(x => x.Version);
        mapping.OptimisticLock.Version();
    }
}

Обратите внимание, что версия отличается между двумя одновременными коммитами, но ничего не происходит.Редактировать: Вот код:

    public ActionConfirmation SaveOrUpdate(IncidenciaDetalleModel model)
    {
        Incidencia incidencia = model.Codigo == null
                                    ? new Incidencia(Convert.ToInt32(model.Solicitante.Id))
                                    : Load(model.Guid);

        TransferFormValuesTo(incidencia, model);

        // Invoke Sharp NHibernate's SaveOrUpdate()
        Incidencia saved = base.SaveOrUpdate(incidencia);

        return ActionConfirmation.CreateSuccessConfirmation(saved);
    }



    private void TransferFormValuesTo(Incidencia incidencia, IncidenciaDetalleModel model)
    {
        incidencia.Resumen = model.Resumen.Trim();
        incidencia.Descripcion = model.Descripcion.Trim();
        incidencia.Solicitante = model.Solicitante.Id.ToString(CultureInfo.InvariantCulture);
        incidencia.Regional = regionalTask.Load(model.Regional.GetRegionalId());
    }

1 Ответ

2 голосов
/ 23 февраля 2012

вы сказали, что Версия обновляется нормально, поэтому не применяются соглашения.

Я полагаю, что нет одновременного обновления. вы используете Load(model.Guid), который не загружает объект из базы данных, но создает для него прокси. загружается в TransferFormValuesTo обновляется и сразу же сохраняется. Только между TransferFormValuesTo и SaveOrUpdate() может быть состояние гонки, ведущее к устаревшим объектам.

Вы можете включить ведение журнала для "NHibernate.SQL", чтобы увидеть, действительно ли обновление клиента 1 происходит после выбора клиента 2

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