Вызов обновления NHibernate Session для объекта базового класса вызывает недопустимое исключение приведения - PullRequest
0 голосов
/ 13 марта 2012

Я использую следующее свободное отображение для двух классов:

1.Application class:

  public ThirdPartyAppMap()
    {
        Schema("Data");
        Id(x => x.ThirdPartyAppId).GeneratedBy.Identity();
        Map(x => x.AppName);
        Map(x => x.CreationTime);
        Map(x => x.Enabled);
        References(x => x.ThirdPartyCustomer, "ThirdPartyCustomerId").Class(typeof(ThirdPartyCustomer));
        HasMany(x => x.ThirdPartyUsersIds).Table("Data.ThirdPartyUser").KeyColumn("ThirdPartyAppId").Element("UserId").AsBag();
    }

. Это простое приложение в моем основном домене

иего подкласс: сопоставление ApplicationExt:

 public ThirdPartyAppProxExtMap()
    {
        Table("Data.ThirdPartyApp");
        KeyColumn("ThirdPartyAppId");
        this.HasManyIds(x => x.DeviceToAppRelIds, "Data.ThirdPartyDeviceToAppRel", "AppId", "ThirdPartyDeviceToAppRelId");
    }

, которое сопоставляется с той же таблицей, но добавляет свойство hasmany, представляющее собой список идентификаторов.Этот класс находится в домене более высокого уровня, который основан на основном домене, базовый домен не должен знать относительные значения класса приложения, в то время как более высокий домен знает.

Отображение работает нормально, но я сталкиваюсь сисключение при работе с объектом сеанса NH:

Когда я вызываю

Session.Refresh(BaseAppObject)

, я получаю следующее исключение:

Unable to cast object of type 'RedPill.Applicative.Module.CM.Domain.ThirdPartyApp' to type 'RedPill.Applicative.Module.PI.Domain.ThirdPartyAppProxExt'.

Выдает недопустимое выражение, поскольку оно пыталось назначитьданные для расширенного свойства типа, которое не существует в BaseAppObject, только в ExtAppObject.Глядя на профилировщик, объект sesion попытался получить ExtApplicationObject вместо BaseApplicationObject.В общем, я сделал Session.Get (), получил BaseAppObject, который работает нормально, но когда я пытаюсь обновить его с помощью Session.Refresh (), он пытается извлечь ExtApplicationObject, а когда NH пытается построить объект из выбора, он выбрасывает недействительнымисключение приведения.

Любая помощь в этом?

С уважением,

Джеймс

1 Ответ

0 голосов
/ 14 марта 2012

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

...