Причина MappingException: нет персистента для: MyClassProxy

При звонке SaveOrUpdate я получаю MappingException No persister for: MyClassProxy.

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

После поиска и прочтения множества вопросов по этому исключению, которые не помогли мне найти причину этого, я задаюсь вопросом: Какие возможные причины могут привести к этому исключению, если отображение работает для чтения/вставки данных?

Еще немного информации о моем случае:

  • с использованием версии NHibernate 3.3.1.4000
  • сопоставление создается кодом (не беглым) и в другой dll, на которую ссылаются
  • отображение состоит из ClassMapping и SubclassMapping с дискриминатором

person Philipp M    schedule 08.05.2013    source источник


Ответы (1)


У меня была точно такая же проблема. В основном я реализовал NHibernate.EmptyInterceptor для поддержки уведомлений INotifyPropertyChanged.

но пример, который я использовал онлайн, пропустил 1 ключевой шаг... он не переопределял метод GetEntityName, поэтому прокси будут «конвертированы» обратно в фактические объекты.

public override string GetEntityName(object entity)
{
    Type type = entity.GetType();
    if (type.FullName.StartsWith("Castle.Proxies") &&
        type.FullName.EndsWith("Proxy"))
    {
        return type.BaseType.FullName;
    }
    return base.GetEntityName(entity);
}

Исходный ответ: Сохранение динамического прокси-сервера замка, который не связан с сеансом NH

Примечание: в примере использовался «Castle.Proxies». Я не использовал это и удалил это условие из блока if.

person Selwyn    schedule 24.12.2013