System.TypeLoadException:“MySql.Data.EntityFrameworkCore.Query.Internal.MySQLSqlTranslatingExpressionVisitorFactory”类型中的方法“Create”

Ped*_*mos 14 c# mysql entity-framework-core asp.net-core

我正在尝试使用以下代码向数据库添加一个新用户:

public async void SeedUsers(){
    int count=0;
    if(count>0){
        return;
    }
    else{
        string email="jujusafadinha@outlook.com.br";
        _context.Add(new User{LoginEmail=email});  
        await _context.SaveChangesAsync();  
    }
}
Run Code Online (Sandbox Code Playgroud)

但它不断给我以下错误:

System.TypeLoadException: 来自 >assembly 'MySql.Data.EntityFrameworkCore, Version=8.0.22.0, Culture=neutral, >PublicKeyToken=c5687fc88969c44d' 的类型 'MySql.Data.EntityFrameworkCore.Query.Internal.MySQLSqlTranslatingExpressionVisitorFactory' 中的方法 'Create'有一个实现。在 MySql.Data.EntityFrameworkCore.Extensions.MySQLServiceCollectionExtensions.AddEntityFrameworkMySQL(IServ>iceCollection services) 在 MySql.Data.EntityFrameworkCore.Infrastructure.Internal.MySQLOptionsExtension.ApplyServices(IServiceColle>ction services) 在 Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.ApplyOptionServices(ID) >options, ServiceCollection 服务)在 Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.<c__DisplayClass4_0.g__BuildServiceProvider|3() 在 Microsoft。2.GetOrAdd(TKey key, Func2 valueFactory) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.GetOrAdd(IDbContextOptions options, >Boolean providerRequired) at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContextChanges[EntryWithout] TEntity](TEntity entity) at Microsoft.EntityFrameworkCore.DbContext.SetEntityState[TEntity](TEntity entity, EntityState >entityState) at Microsoft.EntityFrameworkCore.DbContext.Add[TEntity](TEntity entity) at contatinApi.Data.SeedData.SeedUsers()在 D:\dev\contatinapi\Data\SeedData.cs:line 24 at System.Threading.Tasks.Task.<>c.b__139_1(Object state) at System.Threading.QueueUserWorkItemCallback.<>c.<.cctor>b__6_0 (QueueUserWorkItemCallback quwi) 在 System.Threading。ExecutionContext.RunForThreadPoolUnsafe[TState](ExecutionContext >executionContext, Action`1 callback, TState& state) at System.Threading.QueueUserWorkItemCallback.Execute() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

用户类:

public class User
    {
        public int Id{get;set;}
        public string LoginEmail{get;set;}
        public string UserName{get;set;}
        public DateTime CreatedAt{get;set;}
        public List<Contact> Contacts {get;set;}
        public List<ContactList> ContactLists{get;set;}
    }
Run Code Online (Sandbox Code Playgroud)

EF Core 和 MySQL 包均已更新。此外,我尝试使用存储过程,它给出了相同的结果。

Ex的内容是:

Ex 的值为 {System.TypeLoadException: Method 'Create' in type 'MySql.Data.EntityFrameworkCore.Query.Internal.MySQLSqlTranslatingExpressionVisitorFactory' 来自程序集 'MySql.Data.EntityFrameworkCore, Version=8.0.22.0, Culture=neutral, PublicKeyToken= c5687fc88969c44d' 没有实现。在 MySql.Data.EntityFrameworkCore.Extensions.MySQLServiceCollectionExtensions.AddEntityFrameworkMySQL(IServiceCollection services) 在 MySql.Data.EntityFrameworkCore.Infrastructure.Internal.MySQLOptionsExtension.ApplyServices(IServiceCollection services) 在 Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.ApplyServices(IDbContextOptions services) ) 在 Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.<>c__DisplayClass4_0.g__BuildServiceProvider|3() 在 Microsoft。2.GetOrAdd(TKey key, Func2 valueFactory) at Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.GetOrAdd(IDbContextOptions options, Boolean providerRequired) at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContextDependencies() .Internal.IDbContextDependencies.get_StateManager() at Microsoft.EntityFrameworkCore.Internal.InternalDbSet 1.EntryWithoutDetectChanges(TEntity entity) at Microsoft.EntityFrameworkCore.Internal.InternalDbSet1.Add(TEntity entity) at contatinApi.Data.SeedData.SeedUsers() in D:\dev\ContatinApi\Data\SeedData.cs:line 40}

小智 16

如果您使用的是 Microsoft.EntityFrameworkCore 5.0,请将其降级到 Microsoft.EntityFrameworkCore 3.1.10 MySQL EF 8.0.22 目前与 Microsoft.EntityFrameworkCore 5.0 不兼容

我有一个工作代码,直到我升级到 Microsoft.EntityFrameworkCore 5.0 然后我得到了同样的错误,降级并且它工作了!

希望在 MySQL Bug 论坛上发布 Bug 报告

  • 如果您想尝试的话,MySQL 的 [Pomelo](https://www.nuget.org/packages/Pomelo.EntityFrameworkCore.MySql/5.0.0-alpha.2) 提供程序具有对 EF Core 5.0 的预发布支持。 (5认同)
  • 如果项目文件中仍有对“MySql.Data.EntityFrameworkCore”的引用,请确保使用“UseMySql()”而不是“UseMySQL()”。 (3认同)

Ser*_*rge 0

尝试:

  _context.Users.Add(new User{LoginEmail=email, CreatedAt=DateTime.Now });  
        await _context.SaveChangesAsync();  

or better 
try
{
var newUser= new User{LoginEmail=email, CreatedAt=DateTime.Now };
  _context.Users.Add(newUser);  
await _context.SaveChangesAsync();  
}
catch (Exception ex)
{
var errorMessage = ex.Message;
        
}
in this case you can get a new key if you need;
Run Code Online (Sandbox Code Playgroud)

更新:

instead of    _context.Users.Add(newUser);  

Try:

_context.Entry(newUser).State = EntityState.Added;

Run Code Online (Sandbox Code Playgroud)

但是为什么你的 User 类的 ID 没有属性 [Key] 并且 CreateDate 没有属性 [Column(TypeName = "datetime")] ?您有哪些类型的验证?您可以发布一些与用户相关的 _context 吗?