我已将主键定义如下:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => x.Type);
我尝试了以下内容:
References(x => x.EntityWith2ColsPK);
失败了:
外键(Fk_MyEntity_EntityWith2ColsPK:MyEntities [Fk_EntityWith2ColsPK]))必须与引用的主键具有相同的列数(EntityWith2ColsPKs [Id,Type])
如何从其他实体引用EntityWith2ColsPK?
更新
我尝试了以下内容(根据AlfeG的评论):
HasMany<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).KeyColumns.Add("Id", "Type").Cascade.All();
失败了:
自定义类型未实现UserCollectionType:EntityWith2ColsPK
但无论如何我不想要1对多的关系,我想要一对一的关系。不过,我无法使其中任何一个工作。
另外,我试过了:
HasOne<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).PropertyRef(x => x.Id).PropertyRef(x => x.Type);
哪个失败了:
NHibernate.MappingException:找不到属性:在实体EntityWith2ColsPK上键入
我能做些什么来真正发挥作用?
我设法在数据库中实现了某些东西..但是,由于某种原因,我怀疑它将属性“类型”映射两次,因为我希望它既是主键的一部分,又是外键的一部分。 。 这就是我所做的:
References(x => x.EntityWith2ColsPK).Columns("EntityWith2ColsPKId", "Type").Formula("Id = :EntityWith2ColsPKId AND Type = :Type");
但我收到以下例外:
System.IndexOutOfRangeException:此SqlParameterCollection的索引8无效,Count = 8.
因为此实体的映射与EntityWith2ColsPK相同:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity) x).Language);
HELP!
答案 0 :(得分:2)
您可以使用类似的内容,因为您还没有在Reference
References(x => x.EntityWith2ColsPK)
.Columns(new string[] { "ID", "TYPE" })
.Not.Update()
.Not.Insert();