实体框架:表达式必须可写

问题描述 投票:0回答:1

我正在将实体框架与 MongoDB 结合使用。但是,我在尝试使用

FirstOrDefault
时遇到了问题。

我有一个基类,

SignInCredentials

public class SignInCredentials(string username, string? password)
{
    public string Username { get; set; } = username;
    public string? Password { get; protected init; } = password;
}

我用

Account
扩展它:

public class Account : SignInCredentials
{
    // [Key] sets the primary key
    [Key]
    public ObjectId Id { get; private init; }

    private readonly byte[] salt;

    public Account(string username, string password) : base(username, null)
    {
        Id = new ObjectId();
        salt = GenerateSalt();
        Password = Hash(password, salt);
    }

    // More code not displayed
}

我存储了一个

DbSet<Account>
,其配置为:
modelBuilder.Entity<Account>().ToCollection("accounts");

但是,当我尝试:

accounts.FirstOrDefault(a => a.Username == creds.Username);
,其中
creds
SignInCredentials
时,我收到以下错误:

System.ArgumentException: Expression must be writeable (Parameter 'left')
         at System.Linq.Expressions.Expression.RequiresCanWrite(Expression expression, String paramName)
         at System.Linq.Expressions.Expression.Assign(Expression left, Expression right)
         at System.Linq.Expressions.Expression.MakeBinary(ExpressionType binaryType, Expression left, Expression right, Boolean liftToNull, MethodInfo method, LambdaExpression conversion)
         at System.Linq.Expressions.BinaryExpression.Update(Expression left, LambdaExpression conversion, Expression right)
         at System.Linq.Expressions.ExpressionVisitor.VisitBinary(BinaryExpression node)
         at MongoDB.EntityFrameworkCore.Query.Visitors.ProjectionBindingRemovingExpressionVisitor.VisitBinary(BinaryExpression binaryExpression)

如何修复此错误?

c# asp.net mongodb entity-framework linq
1个回答
0
投票

报告了类似的问题:EfCore 8:JSON 文档中的原始集合与 init 发生错误

您应该申请

set
而不是
init

public string? Password { get; protected set; } = password;

或者您必须将 EF Core 更新到 8.0.1 及更高版本。

© www.soinside.com 2019 - 2024. All rights reserved.