实体框架以一对一的关联方式保存数据

Far*_*nha 8 entity-framework one-to-one foreign-key-relationship entity-framework-4.1

我正在尝试使用外键关联方法在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; }
}
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

现在添加这样的数据时:

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();
Run Code Online (Sandbox Code Playgroud)

或者甚至喜欢这样:

User u = new User();
u.UserName = "farinha";
u.Team = new Team("Flour Power");
context.Users.Add(u);
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法确定相关操作的有效排序.由于外键约束,模型要求或存储生成的值,可能存在依赖关系.

知道如何解决这个问题吗?我是以错误的方式保存数据吗?

提前致谢

Lad*_*nka 10

您没有以错误的方式保存数据,但由于您定义了双向依赖性,因此无法正常工作.只有与已保存的用户相关时才能保存团队,只有与现有团队相关时才能保存用户.您必须通过将外键属性标记为可空来使一个关系成为可选的(例如,TeamIdUser)中:

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

    public int? TeamID { get; set; }
    public virtual Team Team { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您必须先保存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();
Run Code Online (Sandbox Code Playgroud)