我定义主键如下:外键的表2列主键(CompositeId)
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对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:无效的指数8此SqlParameterCollection以计数= 8。
因为这个实体的映射是一样的EntityWith2ColsPK:
CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity) x).Language);
HELP!
它的重复使用问题,像这样http://stackoverflow.com/questions/4460648/how-to-map-composite-主键到外来流利-nhibernate所以你可以通过这个链接找到anser – AlfeG 2012-02-11 12:49:13
这并不能解决我的问题:( – 2012-02-11 15:26:01