基本实体接口是IEntity,它只需要实现“对象ID {get; set;}”。 现在,几乎在每种情况下ID都是Guid类型(会员资格除外)。 我使用以下代码来做接口
的映射...
AnyPart<IEntity> primaryMap = ReferencesAny(x => x.Primary)
.IdentityType<object>() // tried with .IdentityType<Guid>()
.EntityIdentifierColumn("PrimaryID")
.EntityTypeColumn("PrimaryType")
.MetaType<string>();
...
当然,接下来我要添加元值。
所以,现在得到错误
源阵列不够长。检查srcIndex和length,以及数组的下限
并使用 .IdentityType<Guid>()
无法解析属性:Primary.ID:Founder.Connection [.SingleOrDefault [Founder.Connection](NHibernate.Linq.NhQueryable`1 [Founder.Connection],Quote((x,)=&gt; (OrElse(AndAlso(Equal(x.Primary.ID,35c2142a-4c17-4b77-96fd-a2570028a211),Equal(x.Secondary.ID,35c2142a-4c17-4b77-96fd-a2570028a211)),AndAlso(Equal(x。 Secondary.ID,35c2142a-4c17-4b77-96fd-a2570028a211),Equal(x.Primary.ID,35c2142a-4c17-4b77-96fd-a2570028a211))))),)]
更新:
我也试过了.IdentityType(x=>x.ID)
但同样的问题(源数组不够长)
更新II :
发生此错误的查询(实际上包含查询的整个方法)如下:
public IQueryable<Connection> GetConnections(IEntity connectable)
{
IQueryable<Connection> query =
Query().Where(
x => x.Primary.ID == connectable.ID || x.Secondary.ID == connectable.ID);
return query;
}
答案 0 :(得分:1)
在查询中尝试此操作:x.Primary == connectable
(不含ID
)。
问题是您引用了object
(或其他未映射的类型,这就是您需要any
映射的原因)。 ID
上没有object
。
顺便说一句,使用HQL将允许您使用关键字id
来访问id,这在Linq中不可用(技术上它可以作为扩展方法使用,但我不知道Linq到NH很好,可以说它是否已经实施)。每个any
引用在概念上都有id
和class
。