web-dev-qa-db-fra.com

"Impossible de convertir l'objet de type 'ConcreteTypeMapping' en 'Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping" WebApi sur macos

J'ai suivi les instructions pour créer WebAPI sous mac OS à l'aide de Visual Studio.

https://docs.Microsoft.com/en-us/aspnet/core/tutorials/first-web-api-mac?view=aspnetcore-2.1https://github.com/ aspnet/Docs/blob/master/aspnetcore/tutorials/first-web-api-mac.md

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<IAdminUOW, AdminUOW>();
            services.AddTransient(typeof(IGenericRepository<>), typeof(GenericRepository<>));
            services.AddDbContext<MeroRentalContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
                sqlServerOption => sqlServerOption.MigrationsAssembly("Database"))
);
            services.AddMvc();
        }

MeroRentalContext.cs

Fichier cs de contexte de base de données

public class MeroRentalContext : DbContext
    {
        public MeroRentalContext(DbContextOptions<MeroRentalContext> options)
            : base(options)
        { }
        public DbSet<AdminUser> TodoItems { get; set; }
    }

Fichier AdminUser.cs

public class AdminUser
    {
        public Guid UserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }
        public DateTime CreatedTimeStamp { get; set; }
        public DateTime? ModifiedTimeStamp { get; set; }
        public DateTime? LogDate { get; set; }
        public short? LogNumber { get; set; }
        public bool ReloadActiveFlag { get; set; }
        public bool isActive { get; set; }
        public string ExtraText { get; set; }
        public string ResetPasswordToken { get; set; }
        public DateTime? ResetPasswordTokenCreatedTimeStamp { get; set; }
    }

Classe générique à la classe db data

public class GenericRepository<T> : IGenericRepository<T> where T : class
    {
        private readonly MeroRentalContext _entities;
        public GenericRepository(MeroRentalContext dbContext)
        {
            _entities = dbContext;
        }

        public virtual IQueryable<T> GetAll()
        {

            IQueryable<T> query = _entities.Set<T>();
            return query;
        }

        public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
        {

            IQueryable<T> query = _entities.Set<T>().Where(predicate);
            return query;
        }
    }

Table dans la base de données 

CREATE TABLE dbo.AdminUser (
    UserId uniqueidentifier NOT NULL,
    FirstName varchar(max) NOT NULL,
    LastName varchar(max) NOT NULL,
    Email varchar(max) NOT NULL,
    UserName varchar(max) NOT NULL,
    Password varchar(max) NOT NULL,
    CreatedTimeStamp datetime NOT NULL DEFAULT (getdate()),
    ModifiedTimeStamp datetime NULL,
    LogDate datetime NULL,
    LogNumber smallint NULL,
    ReloadActiveFlag bit NOT NULL DEFAULT ((0)),
    isActive bit NOT NULL DEFAULT ((1)),
    ExtraText varchar(max) NULL,
    ResetPasswordToken varchar(max) NULL,
    ResetPasswordTokenCreatedTimeStamp datetime NULL
);

ALTER TABLE dbo.AdminUser ADD CONSTRAINT PK__AdminUse__1788CC4C305F59E9 PRIMARY KEY (UserId);

Depuis lors du débogage, obtenir une erreur aussi 

Impossible de convertir l'objet de type 'ConcreteTypeMapping' en 'Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping

Plus de détails sur la capture d'écran  details of error

Fait des recherches mais ne trouve pas la solution https://github.com/aspnet/EntityFrameworkCore/issues/8369https://github.com/aspnet/EntityFrameworkCore/issues/11704https://www.ctolib.com/article/comments/61636

8
San Jaisy

Selon https://github.com/aspnet/EntityFrameworkCore/issues/11704 vous avez une incompatibilité de version.

Certaines de vos versions d'Entity Framework font référence à 2.1 tandis que d'autres font référence à 2.0.

Vous devez tous les changer pour faire référence à la version 2.1.

Vous devez ouvrir tous les fichiers csproj et rechercher 2.0 et 2.1.

12
mjwills

C'est un problème de non-concordance de version. Il suffit de mettre à jour toutes les versions de référence 2.0 en 2.1

  • Microsoft.AspNetCore.All --version 2.1.0
  • Microsoft.EntityFrameworkCore --version 2.1.0
  • Microsoft.NETCore.App --version 2.1.0

J'espère changer ces références, cela fonctionnera.

2
Md Riyad Khan

J'ai exactement le même problème que toi. Dans mon cas, j'ai référencé directement le Microsoft.EntityFramework.Design au fichier de projetVisual C # (.csproj)en l'ajoutant à la console du gestionnaire de packages:

Install-Package Microsoft.EntityFrameworkCore.Design

Dans l'erreur décrite que j'ai eu, le Microsoft.EntityFrameworkCore.Design est levé et j'ai pensé à l'ajouter. Donc ça fonctionne maintenant.

0
Dasikely