gpt4 book ai didi

c# - Entity Framework 核心 : How to add a composite object?

转载 作者:行者123 更新时间:2023-11-30 16:03:49 24 4
gpt4 key购买 nike

有如下复合对象,例如:

public class Parent
{
[Key]
public int Id { get; set; }

[ForeignKey("ChildRefId")]
public Guid ChildId { get; set; }

public Child Child { get; set; }
}

public class Child
{
[Key]
public Guid Id { get; set; }

[ForeignKey("ParentRefId")]
public int ParentId { get; set; }

public Parent Parent { get; set; }
}

ParentChild 具有一对一的关系:

modelBuilder.Entity<Parent>()
.HasOne(parent => parent.Child)
.WithOne(child => child.Parent)
.WillCascadeOnDelete();

我尝试用 Child 创建新的 Parent 并将其保存在数据库中:

var parent = new Parent { Child = new Child() };
dbContext.Parents.Add(parent);
dbContext.SaveChanges(); //<-- Exception!

...并得到以下异常:

System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_Parent_Child_ChildId". The conflict occurred in database "MyDatabase", table "dbo.Child", column 'Id'.

如果我使用 db context 创建一个 child ,它工作正常:

var child = dbContext.Childs.Add(new Child());
var parent = new Parent { Child = child };
dbContext.Parents.Add(parent);
dbContext.SaveChanges(); //<-- It works fine

问题 #1: 我可以轻松地将新实体添加到嵌套集合中,而无需使用上下文来创建它。但它不适用于一对一关系。例如:

var parent = new Parent();
parent.Grandparents.Add(new Grandparent();
dbContext.Parents.Add(parent);
dbContext.SaveChanges(); //<-- It works fine and parent with one new grandparent were created!

为什么?

问题 #2:请描述我做错了什么,以及如何在没有上下文的情况下保存带有 child 的新 parent 来创建 child (如嵌套集合)?

谢谢!

最佳答案

此错误仅发生在 EF 的 beta-8 版本中。在我将 EF 更新到 rc1-final 版本后,错误消失了。这可能是因为 beta-8 版本还没有图表跟踪。

您可以找到更详细的信息here .

关于c# - Entity Framework 核心 : How to add a composite object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056975/

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