gpt4 book ai didi

c# - 具有 2 列主键 (CompositeId) 的表的外键

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:15 27 4
gpt4 key购买 nike

我定义的主键如下:

CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => x.Type);

我试过以下方法:

References(x => x.EntityWith2ColsPK);

失败了:

Foreign key (Fk_MyEntity_EntityWith2ColsPK:MyEntities [Fk_EntityWith2ColsPK])) must have same number of columns as the referenced primary key (EntityWith2ColsPKs [Id, Type])

如何从另一个实体引用 EntityWith2ColsPK?


更新:

我尝试了以下方法(根据 AlfeG 的评论):

HasMany<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).KeyColumns.Add("Id", "Type").Cascade.All();

哪个失败了:

Custom type does not implement UserCollectionType: EntityWith2ColsPK

但无论如何我不想要一对多的关系,我想要一对一的关系。不过,我无法让它们中的任何一个工作。

此外,我已经尝试过:

HasOne<EntityWith2ColsPK>(x => x.EntityWith2ColsPK).PropertyRef(x => x.Id).PropertyRef(x => x.Type);

失败的是:

NHibernate.MappingException : property not found: Type on entity EntityWith2ColsPK

我该怎么做才能真正发挥作用?


我设法在数据库中取得了一些成就。但是,出于某种原因,我怀疑它两次映射属性“类型”,因为我希望它既是主键的一部分,又是外键的一部分。 .这就是我所做的:

References(x => x.EntityWith2ColsPK).Columns("EntityWith2ColsPKId", "Type").Formula("Id = :EntityWith2ColsPKId AND Type = :Type");

但我收到以下异常:

System.IndexOutOfRangeException : Invalid index 8 for this SqlParameterCollection with Count=8.

因为这个实体的映射和EntityWith2ColsPK是一样的:

CompositeId()
.KeyProperty(x => x.Id)
.KeyProperty(x => ((ILocalizedEntity) x).Language);

帮助!

最佳答案

你可以使用这样的东西,因为你在你的Reference

上没有使用级联
References(x => x.EntityWith2ColsPK)
.Columns(new string[] { "ID", "TYPE" })
.Not.Update()
.Not.Insert();

关于c# - 具有 2 列主键 (CompositeId) 的表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239671/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com