首页 > 解决方案 > 如何使用已存在于 EF 核心中的子实体保存实体?

问题描述

我遇到了一个我从未见过的非常奇怪的问题。我正在使用.net CORE 3.0 + EF。我有两个数据库模型,它们是

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Dog Dog { get; set; }
}

public class Dog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

所以,假设我的数据库中已经有一条 id=1 和 Name = "Bimbo" 的 Dog 记录。现在,我想添加一个现有狗的人:

var p = new Person
{
    Name = "Peter",
    Dog = new Dog
    {
        Id = 1
    };
};

_dbContext.Persons.Add(p);

然后我得到

当 IDENTITY_INSERT 设置为 OFF 时,无法在表“Dogs”中插入标识列的显式值

我了解 EF 尝试将狗作为新记录插入,而我需要它将我的新 Person 记录与现有的 Dog 记录绑定。

我发现这个解决方案建议明确设置外键。还有另一种方法吗?还是处理这种情况的正确方法? EF Core 为标识列插入显式值

标签: c#entity-framework

解决方案


您可以将外键显式添加到人员

   public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int DogId {get;set;}
        public Dog Dog { get; set; }
    }

然后您可以将狗添加为参考而不将其加载到上下文中

var p = new Person
{
    Name = "Peter",
    DogId = 1
};

_dbContext.Persons.Add(p)

;


推荐阅读