实体框架核心:如何添加复合对象?

超码

例如,有以下复合对象:

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();

我尝试创建新的ParentChild,并将其保存在数据库中:

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-8EF版本会发生此错误在我将EF更新到rc1-final版本后,错误消失了。可以解释,在该beta-8版本上还没有图形跟踪

您可以在此处找到更多详细信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架核心:如何添加复合对象?

来自分类Dev

如何使用实体框架核心3.1.1为拥有的实体类型设置复合主键?

来自分类Dev

如何将实体框架核心添加到类库(.net 核心)

来自分类Dev

实体框架核心 - 无法添加子记录

来自分类Dev

实体框架的核心和复杂的价值对象

来自分类Dev

使用包含实体框架核心3.1时如何过滤嵌套对象

来自分类Dev

如何从子实体数据获取父实体框架核心?

来自分类Dev

实体框架核心ForEachAsync

来自分类Dev

实体框架核心收益

来自分类Dev

实体框架核心:查询对象后加载相关数据

来自分类Dev

实体框架4参照已存在的对象添加实体

来自分类Dev

实体框架4参照已存在的对象添加实体

来自分类Dev

当对象具有复合主键时,实体框架从列表创建重复的对象

来自分类Dev

如何使用实体框架核心创建聚簇索引

来自分类Dev

实体框架核心-如何检查数据库是否存在?

来自分类Dev

如何在实体框架核心中调用标量函数

来自分类Dev

实体框架核心:如何使用嵌套字段更新记录?

来自分类Dev

实体框架核心:如何忽略DbSet查找方法的QueryFilters

来自分类Dev

如何在实体框架核心中禁用MemoryCache?

来自分类Dev

实体框架核心:如何确保加载导航属性?

来自分类Dev

实体框架核心如何与foreach()一起使用?

来自分类Dev

实体框架核心添加到.Net核心Web Api-IRelationalTypeMappingSource问题

来自分类Dev

实体框架-如何不更新相关对象

来自分类Dev

实体框架和添加POCO而不添加子对象

来自分类Dev

为什么实体框架核心加载实体的关系而不添加包含

来自分类Dev

实体框架核心添加具有已保存依赖关系的实体会引发错误

来自分类Dev

实体框架核心.include()问题

来自分类Dev

实体框架核心的反向引擎

来自分类Dev

实体框架核心级联删除

Related 相关文章

  1. 1

    实体框架核心:如何添加复合对象?

  2. 2

    如何使用实体框架核心3.1.1为拥有的实体类型设置复合主键?

  3. 3

    如何将实体框架核心添加到类库(.net 核心)

  4. 4

    实体框架核心 - 无法添加子记录

  5. 5

    实体框架的核心和复杂的价值对象

  6. 6

    使用包含实体框架核心3.1时如何过滤嵌套对象

  7. 7

    如何从子实体数据获取父实体框架核心?

  8. 8

    实体框架核心ForEachAsync

  9. 9

    实体框架核心收益

  10. 10

    实体框架核心:查询对象后加载相关数据

  11. 11

    实体框架4参照已存在的对象添加实体

  12. 12

    实体框架4参照已存在的对象添加实体

  13. 13

    当对象具有复合主键时,实体框架从列表创建重复的对象

  14. 14

    如何使用实体框架核心创建聚簇索引

  15. 15

    实体框架核心-如何检查数据库是否存在?

  16. 16

    如何在实体框架核心中调用标量函数

  17. 17

    实体框架核心:如何使用嵌套字段更新记录?

  18. 18

    实体框架核心:如何忽略DbSet查找方法的QueryFilters

  19. 19

    如何在实体框架核心中禁用MemoryCache?

  20. 20

    实体框架核心:如何确保加载导航属性?

  21. 21

    实体框架核心如何与foreach()一起使用?

  22. 22

    实体框架核心添加到.Net核心Web Api-IRelationalTypeMappingSource问题

  23. 23

    实体框架-如何不更新相关对象

  24. 24

    实体框架和添加POCO而不添加子对象

  25. 25

    为什么实体框架核心加载实体的关系而不添加包含

  26. 26

    实体框架核心添加具有已保存依赖关系的实体会引发错误

  27. 27

    实体框架核心.include()问题

  28. 28

    实体框架核心的反向引擎

  29. 29

    实体框架核心级联删除

热门标签

归档