2015-11-30 42 views
9

我有一个使用EF7的ASP.NET5 MVC应用程序。到目前为止它工作的很好,我可以在数据库中添加迁移和持久数据。要定义实体类型'Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin <string>'需要定义一个密钥

的实体类型 “Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin” 需要密钥: 现在的身份加入到我的数据层项目后尝试添加新的迁移,当我得到这个错误

我的上下文是从IdentityDbContext得出:

public class ASSWebApiContext : IdentityDbContext<AppUser> 

的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决赛”,添加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<AppUser> 
    { 
     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<Address> Addresses { get; set; } 
     public DbSet<AddressType> AddressTypes { get; set; } 
     public DbSet<Aircraft> Aircrafts { get; set; } 
     public DbSet<AircraftModel> AircraftModels { get; set; } 
     public DbSet<AircraftOwner> AircraftOwners { get; set; } 
     public DbSet<AircraftOwnerType> AircraftOwnerTypes { get; set; } 
     public DbSet<Country> Countries { get; set; } 
     public DbSet<GPEncodingType> GPEncodingTypes { get; set; } 
     public DbSet<LocationPoint> LocationPoints { get; set; } 
     public DbSet<Manufacturer> Manufacturer { get; set; } 
     public DbSet<Pilot> Pilots { get; set; } 
     public DbSet<ServiceProvider> ServiceProviders { get; set; } 
     public DbSet<State> States { get; set; } 
     public DbSet<Trip> Trips { get; set; } 
     public DbSet<Stop> Stops { get; set; } 
     public DbSet<Track> Tracks { get; set; } 


     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 


      modelBuilder.Entity<AddressType>(
       e => 
       { 
        e.Property(n => n.AddressTypeId).IsRequired().UseSqlServerIdentityColumn(); 
        e.Property(n => n.Name).IsRequired().HasMaxLength(15); 
        e.Ignore(n => n.IsDirty); 
       }); 

      modelBuilder.Entity<Address>(
       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); 
       }); 
... 
+0

我们可以看到IdentityUserLogin的定义吗? – Luke

+0

这是一个系统类型...? –

+0

是的,但你必须使用它的地方或继承它?你已经发布了'IdentityUser',但没有你已经使用过'IdentityUserLogin'的地方 – Luke

回答

21

基本上认同表的键映射的IdentityDbContextOnModelCreating方法,如果这个方法不叫,你最终会得到你得到了错误。如果您从IdentityDbContext派生并提供您自己的定义OnModelCreating,则不会调用此方法,正如您在代码中所做的那样。使用此设置,您必须使用base.OnModelCreating声明明确调用OnModelCreating方法IdentityDbContextThis answer也讨论了我在这里发布的选项

相关问题