gpt4 book ai didi

entity-framework-4.1 - 为什么我会收到 : Unable to determine principle end of . .. 错误并使用以下代码

转载 作者:行者123 更新时间:2023-12-02 05:58:06 24 4
gpt4 key购买 nike

目前正在调整我正在处理的一个项目的模型,但我遇到了困难,似乎无法找出为什么会出现错误。

我有两个类(class)

public class CorePage : BaseClass
{
public CorePage()
{
this.PageContent = new HashSet<PageContent>();
this.PageAliases = new HashSet<PageAlias>();
this.isEditable = true;
}

public string DisplayLabel { get; set; }
public bool isEditable { get; set; }

public int? ParentPageId { get; set; }
public virtual CorePage ParentPage { get; set; }

public int TemplateId { get; set; }
public virtual Template Template { get; set; }

public int DefaultPageAliasId { get; set; }
public virtual PageAlias DefaultPageAlias { get; set; }

public virtual ICollection<PageAlias> PageAliases { get; set; }
public virtual ICollection<PageContent> PageContent { get; set; }
}

还有

public class PageAlias : BaseClass
{
public PageAlias()
{
}
public string Alias { get; set; }
public int PageId { get; set; }
public virtual CorePage Page { get; set; }
}

两个类之间的关系配置如下。

public class CorePageConfiguration : EntityTypeConfiguration<CorePage>
{
public CorePageConfiguration()
{
HasOptional(cp => cp.ParentPage).WithMany().HasForeignKey(cp => cp.ParentPageId).WillCascadeOnDelete(false);
HasRequired(p => p.DefaultPageAlias).WithRequiredDependent().WillCascadeOnDelete(false);
}
}

还有

public class PageAliasConfiguration : EntityTypeConfiguration<PageAlias>
{
public PageAliasConfiguration()
{
Property(pa => pa.Alias).IsRequired().HasMaxLength(500);
HasRequired(pa => pa.Page).WithMany(p => p.PageAliases).HasForeignKey(pa => pa.PageId).WillCascadeOnDelete(false);
}
}

问题是我不断收到此错误:

Unable to determine the principal end of the 'Core.DataContext.PageAlias_Page' relationship. Multiple added entities may have the same primary key.

我似乎无法发现我错过了什么。

任何帮助将不胜感激。

谢谢

最佳答案

DefaultPageAlias 映射为一对多(而不是一对一)关系:

HasRequired(p => p.DefaultPageAlias)
.WithMany()
.HasForeignKey(cp => cp.DefaultPageAliasId)
.WillCascadeOnDelete(false);

您无法与同时不是主键属性的外键属性创建一对一关系。 EF 仅支持 Shared Primary Key Associations定义一对一关系。

我认为共享主键不适合您的模型,因为我假设 DefaultPageAlias 可以是 PageAliases 集合中的别名之一。换句话说,DefaultPageAliasId 可以是 2,也可以是 3 或其他值。对于共享主键来说这是不可能的,因为 DefaultPageAlias 必须始终具有与 CorePage 相同的主键。如果 CorePage 的 Id=2,则 DefaultPageAlias 只能有 Id=2,不能有其他值。

关于entity-framework-4.1 - 为什么我会收到 : Unable to determine principle end of . .. 错误并使用以下代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949073/

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