对于EF Core和.NET 8,假设我使用数据库搭建工具生成如下所示的实体类:
public partial class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Role> Roles { get; set; } = new List<Role>();
}
public partial class Role
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> People { get; set; } = new List<Person>();
}
假设我已经编写了一些代码,如下所示:
public async Task<bool> Create(Person entity)
{
var roles = entity.Roles.ToList();
Context.People.Add(entity);
int rowsCreated = await Context.SaveChangesAsync();
bool result = rowsCreated > 0;
return result;
}
假设我已经用反序列化以下JSON(省略有关清理输入的详细信息)获得的数据补充了传递给上述函数的Person
个实体:
{
"Id": 101,
"Name": "Sally",
"Roles": [
{ "Id": 201 },
{ "Id": 202 }
]
}
我遇到的问题是EF Core试图向Role
个表中添加新行,而不是引用现有角色.我知道在EF 6中,我必须将Role
个实体类"附加"到上下文中,但我不清楚在EF Core中如何做到这一点.
我想有能力做到这一点,而不必查询Role
表的过程中,upserting一个人.