Я использую следующее свободное отображение для двух классов:
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 пытается построить объект из выбора, он выбрасывает недействительнымисключение приведения.
Любая помощь в этом?
С уважением,
Джеймс