外键的表2列主键(CompositeId)
我定义主键如下:外键的表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!
你可以因为你没有使用级联反正您Reference
References(x => x.EntityWith2ColsPK)
.Columns(new string[] { "ID", "TYPE" })
.Not.Update()
.Not.Insert();
非常感谢你,我花了整个周末来研究这个问题,没有成功..我很积极我尝试了你给我的东西,同时改变了其他东西,但它失败了..现在它工作:)再次感谢。 – 2012-02-11 23:14:43
您可能想要将数据库中的列名(如果可以的话)更改为id和type之外的其他名称。例如,在一个名为'order'的表中,您可能会有一个名为'order_id'的列。 – 2012-02-12 03:24:37
我遇到了问题...因为我想要更新和插入“OrderID”,但Type不能再次映射(因为Type已经是CompositeId的一部分),所以它仍然没有解决 – 2012-02-12 20:33:12
它的重复使用问题,像这样http://stackoverflow.com/questions/4460648/how-to-map-composite-主键到外来流利-nhibernate所以你可以通过这个链接找到anser – AlfeG 2012-02-11 12:49:13
这并不能解决我的问题:( – 2012-02-11 15:26:01