2015-11-30 9 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クラスが追加されました。ベータ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ステートメントを使用してメソッドをIdentityDbContextと明示的に呼び出す必要があります。 This answerは、ここに投稿したオプションについても説明しています

関連する問題