2017-09-12 24 views
0

this tutorialに続いて、VS2017 ver 15.3.3ASP.NET Core 1.1.1 - Code firstアプリケーションを作成しました。チュートリアルと私のアプリケーションの唯一の違いは、私がIndividual User Accountsオプションを選択し、LocalDbの代わりにSQL Server 2012 EXPRESS Dbを使用していることです。次のコマンドはうまく実行され、ブログと投稿テーブルを使ってBloggingデータベースを作成します。注:私は既存のアプリケーションのいくつかとの互換性の問題に関して、両方のコンピュータで.NET Core 2.0にアップグレードしていません。EFコア:ユーザーテーブルを作成していないデータベースの更新コマンド

PM> Add-Migration myFirstMigration -context BloggingContext 
PM> Update-Database -context BloggingContext 

ISSUE

しかし、私は、ユーザーテーブル(ASPNETUsers、ASPNETRolsなど)を生成するには、次のコマンドを実行すると、コマンドはエラーなし実行されますが、ユーザーテーブルが作成されていません。 VS2017をバージョン15.3.3にアップグレードする前に、これは起こっていませんでした。また、私の他のコンピュータ(SQLEXPRESS 2014のWindows 10)には、このような問題はありません。このコンピュータはWindows 7です。ここで何が問題になる可能性がありますか?ここでは何が失われていますか?

Update-Database -context BloggingContext 

.csprojファイル

<Project Sdk="Microsoft.NET.Sdk.Web"> 

    <PropertyGroup> 
    <TargetFramework>netcoreapp1.1</TargetFramework> 
    <PackageTargetFallback>$(PackageTargetFallback);portable-net45+win8+wp8+wpa81;</PackageTargetFallback> 
    <UserSecretsId>aspnet-ForgotPassword-B181AA40-BA34-4A36-A650-38857D8E8177</UserSecretsId> 
    </PropertyGroup> 


    <ItemGroup> 
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.3" /> 
    <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.2" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.2" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.1" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.2" /> 
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.1" PrivateAssets="All" /> 
    <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.2" /> 
    </ItemGroup> 

    <ItemGroup> 
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.1" /> 
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" /> 
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.1" /> 
    </ItemGroup> 

</Project> 

ApplicationDbContextModelShapshot.cs

[DbContext(typeof(ApplicationDbContext))] 
partial class ApplicationDbContextModelSnapshot : ModelSnapshot 
{ 
    protected override void BuildModel(ModelBuilder modelBuilder) 
    { 
     modelBuilder 
      .HasAnnotation("ProductVersion", "1.0.0-rc3") 
      .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole", b => 
      { 
       b.Property<string>("Id"); 

       b.Property<string>("ConcurrencyStamp") 
        .IsConcurrencyToken(); 

       b.Property<string>("Name") 
        .HasAnnotation("MaxLength", 256); 

       b.Property<string>("NormalizedName") 
        .HasAnnotation("MaxLength", 256); 

       b.HasKey("Id"); 

       b.HasIndex("NormalizedName") 
        .HasName("RoleNameIndex"); 

       b.ToTable("AspNetRoles"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>", b => 
      { 
       b.Property<int>("Id") 
        .ValueGeneratedOnAdd(); 

       b.Property<string>("ClaimType"); 

       b.Property<string>("ClaimValue"); 

       b.Property<string>("RoleId") 
        .IsRequired(); 

       b.HasKey("Id"); 

       b.HasIndex("RoleId"); 

       b.ToTable("AspNetRoleClaims"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>", b => 
      { 
       b.Property<int>("Id") 
        .ValueGeneratedOnAdd(); 

       b.Property<string>("ClaimType"); 

       b.Property<string>("ClaimValue"); 

       b.Property<string>("UserId") 
        .IsRequired(); 

       b.HasKey("Id"); 

       b.HasIndex("UserId"); 

       b.ToTable("AspNetUserClaims"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>", b => 
      { 
       b.Property<string>("LoginProvider"); 

       b.Property<string>("ProviderKey"); 

       b.Property<string>("ProviderDisplayName"); 

       b.Property<string>("UserId") 
        .IsRequired(); 

       b.HasKey("LoginProvider", "ProviderKey"); 

       b.HasIndex("UserId"); 

       b.ToTable("AspNetUserLogins"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>", b => 
      { 
       b.Property<string>("UserId"); 

       b.Property<string>("RoleId"); 

       b.HasKey("UserId", "RoleId"); 

       b.HasIndex("RoleId"); 

       b.HasIndex("UserId"); 

       b.ToTable("AspNetUserRoles"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>", b => 
      { 
       b.Property<string>("UserId"); 

       b.Property<string>("LoginProvider"); 

       b.Property<string>("Name"); 

       b.Property<string>("Value"); 

       b.HasKey("UserId", "LoginProvider", "Name"); 

       b.ToTable("AspNetUserTokens"); 
      }); 

     modelBuilder.Entity("ForgotPassword.Models.ApplicationUser", b => 
      { 
       b.Property<string>("Id"); 

       b.Property<int>("AccessFailedCount"); 

       b.Property<string>("ConcurrencyStamp") 
        .IsConcurrencyToken(); 

       b.Property<string>("Email") 
        .HasAnnotation("MaxLength", 256); 

       b.Property<bool>("EmailConfirmed"); 

       b.Property<bool>("LockoutEnabled"); 

       b.Property<DateTimeOffset?>("LockoutEnd"); 

       b.Property<string>("NormalizedEmail") 
        .HasAnnotation("MaxLength", 256); 

       b.Property<string>("NormalizedUserName") 
        .HasAnnotation("MaxLength", 256); 

       b.Property<string>("PasswordHash"); 

       b.Property<string>("PhoneNumber"); 

       b.Property<bool>("PhoneNumberConfirmed"); 

       b.Property<string>("SecurityStamp"); 

       b.Property<bool>("TwoFactorEnabled"); 

       b.Property<string>("UserName") 
        .HasAnnotation("MaxLength", 256); 

       b.HasKey("Id"); 

       b.HasIndex("NormalizedEmail") 
        .HasName("EmailIndex"); 

       b.HasIndex("NormalizedUserName") 
        .IsUnique() 
        .HasName("UserNameIndex"); 

       b.ToTable("AspNetUsers"); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>", b => 
      { 
       b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 
        .WithMany("Claims") 
        .HasForeignKey("RoleId") 
        .OnDelete(DeleteBehavior.Cascade); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>", b => 
      { 
       b.HasOne("ForgotPassword.Models.ApplicationUser") 
        .WithMany("Claims") 
        .HasForeignKey("UserId") 
        .OnDelete(DeleteBehavior.Cascade); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>", b => 
      { 
       b.HasOne("ForgotPassword.Models.ApplicationUser") 
        .WithMany("Logins") 
        .HasForeignKey("UserId") 
        .OnDelete(DeleteBehavior.Cascade); 
      }); 

     modelBuilder.Entity("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>", b => 
      { 
       b.HasOne("Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole") 
        .WithMany("Users") 
        .HasForeignKey("RoleId") 
        .OnDelete(DeleteBehavior.Cascade); 

       b.HasOne("ForgotPassword.Models.ApplicationUser") 
        .WithMany("Roles") 
        .HasForeignKey("UserId") 
        .OnDelete(DeleteBehavior.Cascade); 
      }); 
    } 
} 

UPDATE

.NET Core 2.0VS2017 ver 15.3.3を持つ別のコンピュータでASP.NET Core 2.0テンプレートを選択し、同じSQL ServerバージョンSQLEXPRESS2012を使用して、すべて正常に動作することが確認されました。ブログのDbは、ブログや投稿のテーブルやユーザーテーブルのASPNETUsers、ASPNETRolesなどで作成されたので、問題は、システムに.NET Core 1.1.1があり、VS2017 ver 15.3.3があり、ASP.NET Core 1.1.1を作成しようとしているようですIndividual User AccountsのウェブアプリApplicationDbContextは機能しません。

+0

コマンドはエラーなしで実行されているため、プロジェクトルートからVisual Studioの外部でコマンドを実行できますか? 'dotnet ef migrations add myFirstMigration --verbose'がエラーなしで動作する場合、' dotnet ef database update --verbose --context BloggingContext'を実行できるはずです。 – Peter

+0

@Peter問題はApplicationDbContextにあります。 'PM> update-databaseは' BloggingContext'でうまく動作します。 Visual Studioの外部から、 'dotnet ef migrations add myFirstMigration --verbose'を実行すると、期待通りに、2つのDbContextが必要なものを指定していると不平を言う。だから私は '--context ApplicationDbContext'属性値を指定しました。それから、成功して走った 'dotnet ef database update --verbose --context ApplicationDbContext'を実行しました。しかし、Bloggingsデータベースにはまだユーザーテーブルはありません。 – nam

+0

最後のコマンドについては忘れました。 'dotnet ef database update'を実行すると、実際のテーブル更新がトリガされます。 – Peter

答えて

1

移行を追加してデータベースを更新するコマンドを実行すると、BloggingContextを参照しているときにApplicationDbContextのスナップショットが表示されます。 ApplicationDbContextには、選択したIndividual User Accountsテンプレートが付属しています。したがって、Identityテーブル(Userテーブルがそのうちの1つ)を使用する場合は、新しいものを作成する代わりにApplicationDbContextを拡張する必要があります。

関連する問題