c# - 如何使用已存在于 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 为标识列插入显式值
解决方案
您可以将外键显式添加到人员
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)
;
推荐阅读
- php - 在 PHP 应用程序中捆绑 React 文件?
- c++ - 重新排列数组的行和列的问题
- git - Git在不同的目录布局上添加远程
- bash - 如何在 bash 字符串中同时扩展变量和通配符?
- import - 升级时 Drools 规则导出/导入
- amazon-web-services - 响应 CORS 预检 OPTIONS 请求以及随后的 GET/POST/etc 发回哪些 Access-Control-* 标头。要求?
- c# - 我怎样才能使这个程序正常工作?
- python - 尽管来自同一文件的旧定义正在工作,但无法导入新定义
- javascript - moment.js getter 中的日期不正确
- php - 检查是否在上周内登录