gpt4 book ai didi

entity-framework - Entity Framework 以一对一关联方式保存数据

转载 作者:行者123 更新时间:2023-12-04 07:10:15 25 4
gpt4 key购买 nike

我正在尝试使用foreign key association方法来实现EF中的一对一关联。在我的情况下,用户和团队之间存在关联,并且我需要在每个用户中都有一个导航属性。
尝试保存数据时遇到问题。

这些模型如下所示:

public class Team
{
public int ID { get; set; }
public string Name { get; set; }
public int OwnerID { get; set; }
public virtual User Owner { get; set; }
}

public class User
{
public int ID { get; set; }
public string UserName { get; set; }

public int TeamID { get; set; }
public virtual Team Team { get; set; }
}

我按照上面引用的博客文章中的指示将这些位添加到 DbContext OnModelCreating()中:
modelBuilder.Entity<User>()
.HasRequired(u => u.Team)
.WithMany()
.HasForeignKey(u => u.TeamID);

modelBuilder.Entity<Team>()
.HasRequired(t => t.Owner)
.WithMany()
.HasForeignKey(t => t.OwnerID)
.WillCascadeOnDelete(false);

现在,当添加这样的数据时:
User u = new User();
u.UserName = "farinha";
Team t = new Team("Flour Power");
u.Team = t;
t.Owner = u;
context.Users.Add(u);
context.Teams.Add(t);
context.SaveChanges();

甚至像这样:
User u = new User();
u.UserName = "farinha";
u.Team = new Team("Flour Power");
context.Users.Add(u);
context.SaveChanges();

我收到以下错误:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values.



关于如何解决这个问题的任何想法?我是否以错误的方式保存数据?

提前致谢

最佳答案

您不会以错误的方式保存数据,但是由于定义了双向依赖关系,它根本无法工作。仅当与已经保存的用户相关时才可以保存团队,并且仅当与现有团队相关时才可以保存用户。您必须通过将外键属性标记为可空(例如TeamId中的User)来使一个关系成为可选关系:

public class User
{
public int ID { get; set; }
public string UserName { get; set; }

public int? TeamID { get; set; }
public virtual Team Team { get; set; }
}

然后,您必须先保存 User实体,然后才能保存 Team
User u = new User();
u.UserName = "farinha";
context.Users.Add(u);
context.SaveChanges();

u.Team = new Team { Name = "Flour Power", OwnerID = u.ID };
context.SaveChanges();

关于entity-framework - Entity Framework 以一对一关联方式保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5957515/

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