我在后端使用 C#,在前端使用 Angular,将 dotnet 升级到版本 8 后,我在尝试通过前端登录时收到此错误 -
System.MissingMethodException: 'Method not found: 'Void CoreTypeMappingParameters..ctor(System.Type, Microsoft.EntityFrameworkCore.Storage.ValueConversion.ValueConverter, Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer, Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer, Microsoft.EntityFrameworkCore.ChangeTracking.ValueComparer, System.Func`3<Microsoft.EntityFrameworkCore.Metadata.IProperty,Microsoft.EntityFrameworkCore.Metadata.IEntityType,Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator>)'.'
在返回函数中我收到此错误 -
public LoginResponce ValidateUserLogin(LoginRequest loginRequest)
{
MySqlParameter[] sqlParams = new MySqlParameter[1];
sqlParams[0] = new MySqlParameter { ParameterName = "loginId", MySqlDbType = MySqlDbType.VarChar, Value = loginRequest.UserId.StringVal() };
//return Context.Query<LoginResponce>().FromSql("Call ValidateUserLogin (@loginId)", sqlParams).FirstOrDefault();
return Context.LoginResponces.FromSqlRaw<LoginResponce>("Call ValidateUserLogin (@loginId)", sqlParams).FirstOrDefault();
}
这是与数据库字符串连接的代码-
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.ConfigureWarnings(warnings => warnings.Log(CoreEventId.LazyLoadOnDisposedContextWarning));
if (optionsBuilder.IsConfigured == false)
{
optionsBuilder.UseMySql(EntityConstants.SQLConnectionString, new MySqlServerVersion(new Version(8, 0, 33)))
.UseLazyLoadingProxies(false) // <-- enable Lazy Loading
.EnableSensitiveDataLogging()
.EnableDetailedErrors();
}
}
我尝试过以下方法
我将“TrustServerCertificate=True”添加到我的数据库连接字符串中。
检查所有版本是否与EntityFrameworkCore.MySql兼容。
当您更改 .NET 版本时,NuGet 包不会自动更新,您必须手动执行此操作。通常 EF Core / dotnet 包含太多重大更改,无法保持所有版本彼此兼容。
在这种情况下,EF Core 尝试调用一些在 .NET 8 中不再可用但在构建包的版本中可用的方法,因此
MissingMethodException
。