Le type d’entité ‘Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin ‘ nécessite la définition d’une clé.

J’ai une application ASP.NET5 MVC utilisant EF7. Jusqu’à présent, tout fonctionne bien et je peux append des migrations et conserver des données dans la firebase database. Maintenant, après avoir ajouté Identity à mon projet de couche de données, le message d’erreur suivant s’affiche lorsque j’essaie d’append une nouvelle migration:

Le type d’entité ‘Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin’ nécessite la définition d’une clé.

Mon contexte est dérivé d’IdentityDbContext:

public class ASSWebApiContext : IdentityDbContext 

la classe AppUser:

 using Microsoft.AspNet.Identity.EntityFramework; using System; namespace ASS.DomainDataModel.Models { public class AppUser : IdentityUser { public ssortingng AppUserId { get; set; } public DateTime FirstFlight { get; set; } } } 

project.json

 { "version": "1.0.0-*", "description": "ASS.DomainDataModel Class Library", "authors": [ "xxxx" ], "tags": [ "" ], "projectUrl": "", "licenseUrl": "", "frameworks": { "dnx451": { "dependencies": { } }, "dnxcore50": { "dependencies": { } } }, "dependencies": { "ASS.DomainClasses": "1.0.0-*", "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", "EntityFramework.Core": "7.0.0-rc1-final", "EntityFramework.Commands": "7.0.0-rc1-final", "EntityFramework.Relational": "7.0.0-rc1-final", "System.Linq.Expressions": "4.0.11-beta-23516", "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final" }, "commands": { "ef": "EntityFramework.Commands" } } 

Tout ce que j’ai fait ici est de charger le nouveau package correspondant: “Microsoft.AspNet.Identity.EntityFramework”: “3.0.0-rc1-final”, n’a ajouté la classe AppUser – rien d’autre. J’ai eu un projet similaire en utilisant beta-8 en utilisant exactement le même schéma où il a fonctionné sans problèmes. Y at-il des changements pertinents entre beta-8 et rc-1?

Merci!

Ci-dessous, une partie de ASSWebApiContext. Il existe un modelBuilder.Entity pour la plupart des entités ayant un DbSet. Le dossier continue donc pendant un bon moment …

 using Microsoft.Data.Entity; using ASS.DomainClasses.Entities; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.PlatformAbstractions; using System.Linq; using ASS.DomainClasses.Interfaces; using System; using Microsoft.AspNet.Identity.EntityFramework; namespace ASS.DomainDataModel.Models { public class ASSWebApiContext : IdentityDbContext { public IConfigurationBuilder Config { get; set; } public IConfigurationRoot _Configuration { get; private set; } public ASSWebApiContext(IApplicationEnvironment appEnv) { Database.EnsureCreated(); Config = new ConfigurationBuilder() .SetBasePath(appEnv.ApplicationBasePath) .AddJsonFile("config.json"); _Configuration = Config.Build(); } public DbSet
Addresses { get; set; } public DbSet AddressTypes { get; set; } public DbSet Aircrafts { get; set; } public DbSet AircraftModels { get; set; } public DbSet AircraftOwners { get; set; } public DbSet AircraftOwnerTypes { get; set; } public DbSet Counsortinges { get; set; } public DbSet GPEncodingTypes { get; set; } public DbSet LocationPoints { get; set; } public DbSet Manufacturer { get; set; } public DbSet Pilots { get; set; } public DbSet ServiceProviders { get; set; } public DbSet States { get; set; } public DbSet Trips { get; set; } public DbSet Stops { get; set; } public DbSet Tracks { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity( e => { e.Property(n => n.AddressTypeId).IsRequired().UseSqlServerIdentityColumn(); e.Property(n => n.Name).IsRequired().HasMaxLength(15); e.Ignore(n => n.IsDirty); }); modelBuilder.Entity
( e => { e.Property(n => n.AddressId).IsRequired().UseSqlServerIdentityColumn(); e.Property(n => n.AddressTypeId).IsRequired(); e.Property(i => i.CountryId).HasMaxLength(2); e.Property(i => i.AddrLine1).HasMaxLength(256); e.Property(i => i.AddrLine2).HasMaxLength(256); e.Property(i => i.AddrLine3).HasMaxLength(256); e.Property(i => i.Postcode).HasMaxLength(50); e.Ignore(n => n.IsDirty); }); ...

Fondamentalement, les clés des tables d’identité sont mappées dans la méthode OnModelCreating d’ IdentityDbContext et si cette méthode n’est pas appelée, vous obtiendrez l’erreur que vous avez. Cette méthode n’est pas appelée si vous dérivez d’ IdentityDbContext et si vous fournissez votre propre définition de OnModelCreating comme vous l’avez fait dans votre code. Avec cette configuration, vous devez appeler explicitement la méthode OnModelCreating d’ IdentityDbContext aide de l’instruction base.OnModelCreating . Cette réponse traite également de l’option que j’ai posté ici