实体类型’Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin ‘需要定义一个键

我有一个使用EF7的ASP.NET5 MVC应用程序。 它到目前为止工作得很好,我能够在数据库中添加迁移和持久数据。 现在,在将Identity添加到我的数据层项目后,我在尝试添加新迁移时遇到此错误:

实体类型’Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin’需要定义一个键

我的上下文源自IdentityDbContext:

public class ASSWebApiContext : IdentityDbContext 

AppUser类:

 using Microsoft.AspNet.Identity.EntityFramework; using System; namespace ASS.DomainDataModel.Models { public class AppUser : IdentityUser { public string 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" } } 

我在这里所做的就是加载相关的新软件包:“Microsoft.AspNet.Identity.EntityFramework”:“3.0.0-rc1-final”,添加了AppUser类 – 没有别的。 我有一个类似的项目使用beta-8使用完全相同的模式,它没有问题。 beta-8和rc-1之间是否有任何相关变化?

谢谢!

以下是ASSWebApiContext的一部分。 对于大多数具有DbSet的实体,都有一个modelBuilder.Entity。 所以这个文件还有很长一段时间……

 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 Countries { 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); }); ...

基本上Identity表的键是在IdentityDbContext的OnModelCreating方法中映射的,如果没有调用此方法,最终会得到你得到的错误。 如果您从IdentityDbContext派生并且像在代码中一样提供自己的OnModelCreating定义,则不会调用此方法。 使用此设置,您必须使用base.OnModelCreating语句显式调用IdentityDbContextOnModelCreating方法。 这个答案还讨论了我在这里发布的选项