【问题标题】:ef core plus: ArgumentNullException: Value cannot be null. Parameter name: propertyef core plus:ArgumentNullException:值不能为空。参数名称:属性
【发布时间】:2023-12-17 01:01:01
【问题描述】:

使用 ef core plus,我正在尝试更新模型上的一组行:

await _context.Set<Critique>()
            .Include(c => c.User)
            .Where(c => c.Closed && c.User.Id == user.Id)
            .UpdateAsync(c => new Critique() { User = deletedUser });

在这里我得到以下异常:

ArgumentNullException:值不能为空。 参数名称:属性 Npgsql.EntityFrameworkCore.PostgreSQL.Utilities.Check.NotNull(T value, string parameterName) 在 Check.cs,第 21 行

TargetInvocationException:调用的目标已抛出异常。 System.RuntimeMethodHandle.InvokeMethod(object target, object[] arguments, Signature sig, bool constructor, bool wrapException

当我只用 ef core 加载数据时,它会加载我期望的 1 行

var test = await _context.Set<Critique>()
            .Where(c => c.Closed && c.User.Id == user.Id)
            .ToArrayAsync();

数据库模型没有什么花哨的,但是太大了,不能在这里发布。我正在广泛使用 [Required],并且有很多一对多关系。

(顺便说一句,user.Id 不为 null 且可用,并且 deletedUser 在代码和数据库中也可用。)

应该如何解释这个错误?我做错了什么?

感谢您的帮助!

【问题讨论】:

    标签: entity-framework-core entity-framework-plus


    【解决方案1】:

    我们的库现在可以更新值,但不能使用导航属性更新值

    这行不通

    .UpdateAsync(c => new Critique() { User = deletedUser });
    

    但如果你有财产,这会奏效

    .UpdateAsync(c => new Critique() { UserID = deletedUserID });
    

    此外,没有必要添加 .Include(c =&gt; c.User),因为您没有检索到此信息。

    【讨论】:

    • 感谢您抽出宝贵时间回答!是的,Include 是一种绝望的行为。好的,谢谢你的澄清!