我正在使用以下两个类的流畅映射:
1.应用类:
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 mapping:
public ThirdPartyAppProxExtMap()
{
Table("Data.ThirdPartyApp");
KeyColumn("ThirdPartyAppId");
this.HasManyIds(x => x.DeviceToAppRelIds, "Data.ThirdPartyDeviceToAppRel", "AppId", "ThirdPartyDeviceToAppRelId");
}
哪个映射到同一个表但添加了一个hasmany属性,这是一个id列表。 此类位于更高级别的域中,该域基于核心域, 核心域不需要知道应用程序类的rels,而更高的域域。
映射工作正常,但在使用NH会话对象时遇到异常:
当我打电话
Session.Refresh(BaseAppObject)
我收到以下例外:
Unable to cast object of type 'RedPill.Applicative.Module.CM.Domain.ThirdPartyApp' to type 'RedPill.Applicative.Module.PI.Domain.ThirdPartyAppProxExt'.
它抛出invalidcastexception,因为它试图将数据分配给BaseAppObject上不存在的扩展类型属性,仅在ExtAppObject上。 查看分析器,sesion对象尝试获取ExtApplicationObject而不是BaseApplicationObject。 所以基本上,我做了Session.Get(),接收了BaseAppObject,它工作正常,但当我尝试使用Session.Refresh()刷新它时,它尝试获取ExtApplicationObject,当NH尝试从选择中构建对象时,它会抛出无效施放异常。
对此有何帮助?
问候,
詹姆斯
答案 0 :(得分:0)
您尝试在单个表中使用table-per-class,但由于多种原因而失败。使用鉴别器
更改为多个表或每个层次的表