엔터티 형식 'Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin '키를 정의해야합니다.

asp.net-identity asp.net-mvc c# entity-framework-core

문제

EF7을 사용하는 ASP.NET5 MVC 응용 프로그램이 있습니다. 그것은 지금까지 모두 잘 작동하며 데이터베이스에 마이그레이션을 추가하고 데이터를 유지할 수 있습니다. 이제 데이터 레이어 프로젝트에 ID를 추가 한 후 새 마이그레이션을 추가 할 때이 오류가 발생합니다.

엔터티 형식 '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-final"을로드하고 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);
                });
...

수락 된 답변

기본적으로 신원 테이블의 키에 매핑되는 OnModelCreating 방법 IdentityDbContext 이 메소드가 호출되지 않은 경우, 당신은 당신이있어 오류가 종료됩니다. 이 메서드는 IdentityDbContext 에서 파생되고 코드에서와 같이 OnModelCreating 대한 고유 한 정의를 제공하는 경우 호출되지 않습니다. 이 설정을 사용하면 base.OnModelCreating 문을 사용하여 IdentityDbContextOnModelCreating 메서드를 명시 적으로 호출 base.OnModelCreating 합니다. 이 대답 은 또한 여기에 올린 옵션에 대해서도 설명합니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.