0

VS 2017 (버전 15.5)에서 새 ASP.NET Core 2 MVC 프로젝트를 만들고 string에서 Guid로 사용자 ID 유형을 변경했습니다 (또한 ApplicationUser 클래스 변경). 이름을 사용자에게 추가)하고 모델을 추가 한 다음Entity Framework - 'PK_AspNetUserTokens'개체가 'UserId'열에 종속 됨

Add-Migration Init 
Update-Database 

을 입력했지만 오류가 발생하고 데이터베이스가 생성되지 않습니다.

public class ApplicationDbContext : IdentityDbContext<User, IdentityRole<Guid>, Guid> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

    public DbSet<TvShow> TvShows { get; set; } 
    public DbSet<Episode> Episodes { get; set; } 
    public DbSet<Subscription> Subscriptions { get; set; } 
    public DbSet<Notification> Notifications { get; set; } 
    public DbSet<Genre> Genres { get; set; } 
    public DbSet<TvShowGenre> TvShowGenre { get; set; } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 
     base.OnModelCreating(builder); 

     builder.Entity<Subscription>() 
      .HasKey(c => new { c.TvShowId, c.UserId }); 

     builder.Entity<TvShowGenre>() 
      .HasKey(c => new { c.TvShowId, c.GenreId }); 
    } 
} 

가 여기 내 마이그레이션 클래스의 (까지만 방법) :

public partial class Init : Migration 
{ 
    protected override void Up(MigrationBuilder migrationBuilder) 
    { 
     migrationBuilder.DropIndex(
      name: "UserNameIndex", 
      table: "AspNetUsers"); 

     migrationBuilder.DropIndex(
      name: "IX_AspNetUserRoles_UserId", 
      table: "AspNetUserRoles"); 

     migrationBuilder.DropIndex(
      name: "RoleNameIndex", 
      table: "AspNetRoles"); 

     migrationBuilder.AlterColumn<Guid>(
      name: "UserId", 
      table: "AspNetUserTokens", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "Id", 
      table: "AspNetUsers", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "RoleId", 
      table: "AspNetUserRoles", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "UserId", 
      table: "AspNetUserRoles", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "UserId", 
      table: "AspNetUserLogins", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "UserId", 
      table: "AspNetUserClaims", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "Id", 
      table: "AspNetRoles", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.AlterColumn<Guid>(
      name: "RoleId", 
      table: "AspNetRoleClaims", 
      nullable: false, 
      oldClrType: typeof(string)); 

     migrationBuilder.CreateTable(
      name: "Genres", 
      columns: table => new 
      { 
       Id = table.Column<long>(nullable: false) 
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
       Genres = table.Column<int>(nullable: false), 
       IsFirst = table.Column<bool>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_Genres", x => x.Id); 
      }); 

     migrationBuilder.CreateTable(
      name: "Notifications", 
      columns: table => new 
      { 
       Id = table.Column<long>(nullable: false) 
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
       CreateDate = table.Column<DateTime>(nullable: false), 
       Message = table.Column<string>(nullable: true), 
       Seen = table.Column<bool>(nullable: false), 
       UserId = table.Column<Guid>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_Notifications", x => x.Id); 
       table.ForeignKey(
        name: "FK_Notifications_AspNetUsers_UserId", 
        column: x => x.UserId, 
        principalTable: "AspNetUsers", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
      }); 

     migrationBuilder.CreateTable(
      name: "TvShows", 
      columns: table => new 
      { 
       Id = table.Column<long>(nullable: false) 
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
       ProductionYear = table.Column<string>(nullable: true), 
       Status = table.Column<int>(nullable: false), 
       Title = table.Column<string>(nullable: true) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_TvShows", x => x.Id); 
      }); 

     migrationBuilder.CreateTable(
      name: "Episodes", 
      columns: table => new 
      { 
       Id = table.Column<long>(nullable: false) 
        .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
       BroadcastDate = table.Column<DateTime>(nullable: true), 
       Duration = table.Column<TimeSpan>(nullable: true), 
       Number = table.Column<int>(nullable: true), 
       Season = table.Column<string>(nullable: true), 
       Title = table.Column<string>(nullable: true), 
       TvShowId = table.Column<long>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_Episodes", x => x.Id); 
       table.ForeignKey(
        name: "FK_Episodes_TvShows_TvShowId", 
        column: x => x.TvShowId, 
        principalTable: "TvShows", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
      }); 

     migrationBuilder.CreateTable(
      name: "Subscriptions", 
      columns: table => new 
      { 
       TvShowId = table.Column<long>(nullable: false), 
       UserId = table.Column<Guid>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_Subscriptions", x => new { x.TvShowId, x.UserId }); 
       table.ForeignKey(
        name: "FK_Subscriptions_TvShows_TvShowId", 
        column: x => x.TvShowId, 
        principalTable: "TvShows", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
       table.ForeignKey(
        name: "FK_Subscriptions_AspNetUsers_UserId", 
        column: x => x.UserId, 
        principalTable: "AspNetUsers", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
      }); 

     migrationBuilder.CreateTable(
      name: "TvShowGenre", 
      columns: table => new 
      { 
       TvShowId = table.Column<long>(nullable: false), 
       GenreId = table.Column<long>(nullable: false) 
      }, 
      constraints: table => 
      { 
       table.PrimaryKey("PK_TvShowGenre", x => new { x.TvShowId, x.GenreId }); 
       table.ForeignKey(
        name: "FK_TvShowGenre_Genres_GenreId", 
        column: x => x.GenreId, 
        principalTable: "Genres", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
       table.ForeignKey(
        name: "FK_TvShowGenre_TvShows_TvShowId", 
        column: x => x.TvShowId, 
        principalTable: "TvShows", 
        principalColumn: "Id", 
        onDelete: ReferentialAction.Cascade); 
      }); 

     migrationBuilder.CreateIndex(
      name: "UserNameIndex", 
      table: "AspNetUsers", 
      column: "NormalizedUserName", 
      unique: true, 
      filter: "[NormalizedUserName] IS NOT NULL"); 

     migrationBuilder.CreateIndex(
      name: "RoleNameIndex", 
      table: "AspNetRoles", 
      column: "NormalizedName", 
      unique: true, 
      filter: "[NormalizedName] IS NOT NULL"); 

     migrationBuilder.CreateIndex(
      name: "IX_Episodes_TvShowId", 
      table: "Episodes", 
      column: "TvShowId"); 

     migrationBuilder.CreateIndex(
      name: "IX_Notifications_UserId", 
      table: "Notifications", 
      column: "UserId"); 

     migrationBuilder.CreateIndex(
      name: "IX_Subscriptions_UserId", 
      table: "Subscriptions", 
      column: "UserId"); 

     migrationBuilder.CreateIndex(
      name: "IX_TvShowGenre_GenreId", 
      table: "TvShowGenre", 
      column: "GenreId"); 

     migrationBuilder.AddForeignKey(
      name: "FK_AspNetUserTokens_AspNetUsers_UserId", 
      table: "AspNetUserTokens", 
      column: "UserId", 
      principalTable: "AspNetUsers", 
      principalColumn: "Id", 
      onDelete: ReferentialAction.Cascade); 
    } 
} 

답변

0

내가 당신과 동일한 문제에 직면

The object 'PK_AspNetUserTokens' is dependent on column 'UserId'. 
ALTER TABLE ALTER COLUMN UserId failed because one or more objects access this column. 

여기 내 상황입니다. 내 폴더 "마이그레이션"을 삭제하고 마이그레이션을 다시 추가합니다. 이전 마이그레이션의 변경으로 인해 FK를 적절히 생성 할 수 없었습니다.