使用 EF Core 添加 ID 为 0 的实体

Adding entities with Id 0 using EF Core

我正在尝试更新名为 Tags 的 ICollection Navigation 属性,它属于用户实体:

if (memberUpdateDto.Tags != null)
{
    user.Tags = new List<UsersTags>();
    foreach (TagDto tagDto in memberUpdateDto.Tags)
    {
      user.Tags.Add(new UsersTags
      {
         AppUserId = user.Id,
         TagId = tagDto.Value
      });
     }
 }  

UserTags 连接用户和标签的地方:

public class UsersTags
{
   public int Id { get; set; }
   public int AppUserId { get; set; }
   public AppUser AppUser { get; set; }
   public int TagId { get; set; }
   public Tag Tag { get; set; }
}  

这给出了下一个错误:

"Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details.
 ---> Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 19: 'FOREIGN KEY constraint failed'.  

我认为这是因为 UsersTags 的 Id 为 0。
如代码所示,我想删除旧的,只添加新的,我如何告诉 EF 忽略那个 Id,只添加新的?
根据 Serge 的回答 - 我想避免创建另一个存储库,而是将导航属性更新为用户实体的一部分(我相信这是可能的)。

我的标签:
Id CreatorId IsApproved 文本 1 空 1 SQL 2 空 1 Python 3 NULL 1 反应 4 空 1 Angular

试试这个

var  newUserTags = new List<UsersTags>();

if (memberUpdateDto.Tags != null)
{
      foreach (TagDto tagDto in memberUpdateDto.Tags)
    {
      newUserTags.Add(new UsersTags
      {
         AppUserId = user.Id,
         TagId = tagDto.Value
      });
     }
 }  
var prevUserTags=context.UserTags.Where(i=>i.UserId=user.Id).ToList();

if ( prevUserTags!=null && prevUserTags.Count > 0 ) context.UserTags.RemoveRange(prevUserTags);

 if ( newUserTags.Count > 0 ) context.UserTags.AddRange(newUserTags);

context.SaveChanges();

您不需要在循环中分配 AppUserId,因为它会将标签添加到指定的用户,因此正确的版本是:

foreach (TagDto tagDto in memberUpdateDto.Tags)
{
  user.Tags.Add(new UsersTags
  {
     TagId = tagDto.Value
  });
 }

如果你想删除之前的记录你只需要在循环之前写这行:

context.Set<UsersTags>().RemoveRange(user.Tags);