例如,有以下复合对象:
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; }
}
Parent
并Child
具有一对一的关系:
modelBuilder.Entity<Parent>()
.HasOne(parent => parent.Child)
.WithOne(child => child.Parent)
.WillCascadeOnDelete();
我尝试创建新的Parent
用Child
,并将其保存在数据库中:
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上下文创建一个子级,则可以正常工作:
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:请描述一下我做错了什么,以及如何在没有上下文的情况下与孩子一起保存新的父母来创建孩子(如嵌套集合)?
谢谢!
仅对于beta-8
EF版本会发生此错误。在我将EF更新到rc1-final
版本后,错误消失了。可以解释,在该beta-8
版本上还没有图形跟踪。
您可以在此处找到更多详细信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句