我正在将实体框架核心与MongoDB一起使用.然而,我在try 使用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");

然而,当我try :accounts.FirstOrDefault(a => a.Username == creds.Username);(其中credsSignInCredentials)时,我得到以下错误:

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)

如何修复此错误?

推荐答案

报告了类似的问题:EfCore 8: Primitive collections in JSON documents error with init.

要么您应该应用set而不是init.

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

或者您必须将EF Core更新到8.0.1及以上版本.

请注意:此时,100 only supports EF Core 7 and .NET 7.

Csharp相关问答推荐

从C#网站调用时找不到存储过程

如何使用PDFSharp将文本添加到现有PDF

.NET通过版本自动增量设置包版本

编写DataAnnotations自定义验证器的多种方法

处理. netstandard2.0项目中HttpClient.SslProtocol的PlatformNotSupportedException问题""

一小时后,自定义缓存停止在App Insight中保存

如何在C#中将对象[*,*]直接转换为字符串[*,*]?

为什么SignalR在每个Blazor服务器应用程序启动时最多启动8个服务器?

NET8 Maui&;iOS:AppCenter崩溃错误

关于扩展文件类C#的矛盾

如何在不复制或使用输出的情况下定义项目依赖

将操作从编辑页重定向到带参数的索引页

如何避免在.NET中将日志(log)写入相对路径

使用ASP.NET MVC for Lemon Squeezy X-Signature创建散列

如何从Entity Framework Core中填充ListIInterface

Blazor:搜索框在第一次搜索时不搜索

忽略Visual Studio代码中的StyleCop规则

根据优先级整理合同列表

除非首先访问使用的终结点,否则本地API上的终结点不起作用

我可以阻止类型上的Object.ToString()吗?