【问题标题】:Removing a record from DbSet throws "Value cannot be null" error in EF Core从 DbSet 中删除记录会在 EF Core 中引发“值不能为空”错误
【发布时间】:2021-05-15 13:32:00
【问题描述】:

我有以下代码从GroupMemberships DbSet 中删除成员资格,这非常简单:

public int RemoveStudentFromGroup(string studentId, int groupId)
{
    try
    {
        var member = _context.GroupMemberships
                             .Where(pgm => pgm.UserId == studentId && pgm.StudentGroupId == groupId)
                             .FirstOrDefault();

        _context.GroupMemberships.Remove(member);
        _context.SaveChanges();

        return 1;
    }
    catch
    {
        throw;
    }
}

但是,由于某种原因(从 EF Core 2.2 升级到 3.0 后),此代码会引发以下错误:

System.ArgumentNullException:值不能为空。 (参数“实体”)

在 Microsoft.EntityFrameworkCore.Utilities.Check.NotNull[T](T 值, 字符串参数名称)
在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet`1.Remove(TEntity 实体)
在 Synergy.Controllers.StudentGroupController.RemoveStudentFromGroup(字符串 studentId, Int32 groupId) 在 C:\Users\ErkanEr\source\repos\Synergy\Controllers\StudentGroupController.cs:line 810
在 lambda_method623(闭包,对象,对象[])

这里是GroupMembership实体的定义:

public class GroupMembership
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("StudentGroupId")]
    public StudentGroup StudentGroup { get; set; }
    public int StudentGroupId { get; set; }

    [ForeignKey("UserId")]
    public ApplicationUser User { get; set; }
    public string UserId { get; set; }
}

任何想法为什么会发生这种情况?

【问题讨论】:

  • 您是否检查了 member != null 吗?

标签: c# entity-framework entity-framework-core


【解决方案1】:

您必须在调用 .Remove() 之前检查 member 是否为空

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    相关资源
    最近更新 更多