gpt4 book ai didi

c# - Entity Framework 6 Code First 中相互引用的两个表

转载 作者:行者123 更新时间:2023-11-30 20:46:23 28 4
gpt4 key购买 nike

我有实体 ProjectSprint,其中 Sprint 属于项目。项目还包含一个 Backlog,它是对单个 Sprint 的引用,默认情况下它将向其添加项目。

public class Project
{
public long ID { get; set; }
public string Name { get; set; }

public long BacklogId { get; set; }
public Sprint Backlog { get; set; }
}

public class Sprint
{
public long ID { get; set; }
public string Name { get; set; }

public long ProjectId { get; set; }
public Project Project { get; set; }
}

Entity Framework显然不能仅仅从上面判断这两个实体之间的关系并抛出

Additional information: Unable to determine the principal end of an association between the types 'Sprint' and 'Project'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations.

我试错了很多次,但无法通过各种问题,例如“Multiplicity is not valid in Role”问题。

如何使用数据注释或 OnModelCreating() 正确地对我已正确描述的这种关系进行建模。我目前有

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Sprint>()
.HasRequired(x => x.Project)
.WithRequiredPrincipal(x => x.Backlog);
}

背景:我正在使用 EF6 并使用 System.Data.SQLite.EF6 提供程序连接到 Sqlite 文件

最佳答案

我认为您实际上需要两种截然不同的关系。项目和冲刺(项目的所有冲刺)之间有 1:0..N,项目和冲刺(项目的积压冲刺)之间有 0..1:1,因此您需要两个模型构建器语句。 Sprint.ProjectId 是第一个关联的 FK,Project.BacklogId 是第二个关联的。当然,此布局允许您指定不属于该项目的积压工作,因此您需要对其进行验证。或者,您可以引入一个 Sprint.IsBacklog 标志,在这种情况下您只需要一个关联。

关于c# - Entity Framework 6 Code First 中相互引用的两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27088054/

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