Revert IdentityDbContext breaking change (#1286)
This commit is contained in:
parent
f555a26b4a
commit
980206cc26
|
|
@ -27,7 +27,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
||||||
/// Base class for the Entity Framework database context used for identity.
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="TUser">The type of the user objects.</typeparam>
|
/// <typeparam name="TUser">The type of the user objects.</typeparam>
|
||||||
public class IdentityDbContext<TUser> : IdentityDbContext<TUser, string> where TUser : IdentityUser
|
public class IdentityDbContext<TUser> : IdentityDbContext<TUser, IdentityRole, string> where TUser : IdentityUser
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of <see cref="IdentityDbContext"/>.
|
/// Initializes a new instance of <see cref="IdentityDbContext"/>.
|
||||||
|
|
@ -41,27 +41,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
||||||
protected IdentityDbContext() { }
|
protected IdentityDbContext() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Base class for the Entity Framework database context used for identity.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TUser">The type of user objects.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for users and roles.</typeparam>
|
|
||||||
public class IdentityDbContext<TUser, TKey> : IdentityDbContext<TUser, TKey, IdentityUserClaim<TKey>, IdentityUserLogin<TKey>, IdentityUserToken<TKey>>
|
|
||||||
where TUser : IdentityUser<TKey>
|
|
||||||
where TKey : IEquatable<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the db context.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="options">The options to be used by a <see cref="DbContext"/>.</param>
|
|
||||||
public IdentityDbContext(DbContextOptions options) : base(options) { }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the class.
|
|
||||||
/// </summary>
|
|
||||||
protected IdentityDbContext() { }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for the Entity Framework database context used for identity.
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -85,99 +64,6 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
||||||
protected IdentityDbContext() { }
|
protected IdentityDbContext() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Base class for the Entity Framework database context used for identity.
|
|
||||||
/// </summary>
|
|
||||||
/// <typeparam name="TUser">The type of user objects.</typeparam>
|
|
||||||
/// <typeparam name="TKey">The type of the primary key for users and roles.</typeparam>
|
|
||||||
/// <typeparam name="TUserClaim">The type of the user claim object.</typeparam>
|
|
||||||
/// <typeparam name="TUserLogin">The type of the user login object.</typeparam>
|
|
||||||
/// <typeparam name="TUserToken">The type of the user token object.</typeparam>
|
|
||||||
public abstract class IdentityDbContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken> : DbContext
|
|
||||||
where TUser : IdentityUser<TKey>
|
|
||||||
where TKey : IEquatable<TKey>
|
|
||||||
where TUserClaim : IdentityUserClaim<TKey>
|
|
||||||
where TUserLogin : IdentityUserLogin<TKey>
|
|
||||||
where TUserToken : IdentityUserToken<TKey>
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the class.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="options">The options to be used by a <see cref="DbContext"/>.</param>
|
|
||||||
public IdentityDbContext(DbContextOptions options) : base(options) { }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Initializes a new instance of the class.
|
|
||||||
/// </summary>
|
|
||||||
protected IdentityDbContext() { }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the <see cref="DbSet{TEntity}"/> of Users.
|
|
||||||
/// </summary>
|
|
||||||
public DbSet<TUser> Users { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User claims.
|
|
||||||
/// </summary>
|
|
||||||
public DbSet<TUserClaim> UserClaims { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User logins.
|
|
||||||
/// </summary>
|
|
||||||
public DbSet<TUserLogin> UserLogins { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User tokens.
|
|
||||||
/// </summary>
|
|
||||||
public DbSet<TUserToken> UserTokens { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Configures the schema needed for the identity framework.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="builder">
|
|
||||||
/// The builder being used to construct the model for this context.
|
|
||||||
/// </param>
|
|
||||||
protected override void OnModelCreating(ModelBuilder builder)
|
|
||||||
{
|
|
||||||
builder.Entity<TUser>(b =>
|
|
||||||
{
|
|
||||||
b.HasKey(u => u.Id);
|
|
||||||
b.HasIndex(u => u.NormalizedUserName).HasName("UserNameIndex").IsUnique();
|
|
||||||
b.HasIndex(u => u.NormalizedEmail).HasName("EmailIndex");
|
|
||||||
b.ToTable("AspNetUsers");
|
|
||||||
b.Property(u => u.ConcurrencyStamp).IsConcurrencyToken();
|
|
||||||
|
|
||||||
b.Property(u => u.UserName).HasMaxLength(256);
|
|
||||||
b.Property(u => u.NormalizedUserName).HasMaxLength(256);
|
|
||||||
b.Property(u => u.Email).HasMaxLength(256);
|
|
||||||
b.Property(u => u.NormalizedEmail).HasMaxLength(256);
|
|
||||||
|
|
||||||
// Replace with b.HasMany<IdentityUserClaim>().
|
|
||||||
b.HasMany<TUserClaim>().WithOne().HasForeignKey(uc => uc.UserId).IsRequired();
|
|
||||||
b.HasMany<TUserLogin>().WithOne().HasForeignKey(ul => ul.UserId).IsRequired();
|
|
||||||
b.HasMany<TUserToken>().WithOne().HasForeignKey(ut => ut.UserId).IsRequired();
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Entity<TUserClaim>(b =>
|
|
||||||
{
|
|
||||||
b.HasKey(uc => uc.Id);
|
|
||||||
b.ToTable("AspNetUserClaims");
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Entity<TUserLogin>(b =>
|
|
||||||
{
|
|
||||||
b.HasKey(l => new { l.LoginProvider, l.ProviderKey });
|
|
||||||
b.ToTable("AspNetUserLogins");
|
|
||||||
});
|
|
||||||
|
|
||||||
builder.Entity<TUserToken>(b =>
|
|
||||||
{
|
|
||||||
b.HasKey(l => new { l.UserId, l.LoginProvider, l.Name });
|
|
||||||
b.ToTable("AspNetUserTokens");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for the Entity Framework database context used for identity.
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -189,7 +75,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
||||||
/// <typeparam name="TUserLogin">The type of the user login object.</typeparam>
|
/// <typeparam name="TUserLogin">The type of the user login object.</typeparam>
|
||||||
/// <typeparam name="TRoleClaim">The type of the role claim object.</typeparam>
|
/// <typeparam name="TRoleClaim">The type of the role claim object.</typeparam>
|
||||||
/// <typeparam name="TUserToken">The type of the user token object.</typeparam>
|
/// <typeparam name="TUserToken">The type of the user token object.</typeparam>
|
||||||
public abstract class IdentityDbContext<TUser, TRole, TKey, TUserClaim, TUserRole, TUserLogin, TRoleClaim, TUserToken> : IdentityDbContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken>
|
public abstract class IdentityDbContext<TUser, TRole, TKey, TUserClaim, TUserRole, TUserLogin, TRoleClaim, TUserToken> : IdentityUserContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken>
|
||||||
where TUser : IdentityUser<TKey>
|
where TUser : IdentityUser<TKey>
|
||||||
where TRole : IdentityRole<TKey>
|
where TRole : IdentityRole<TKey>
|
||||||
where TKey : IEquatable<TKey>
|
where TKey : IEquatable<TKey>
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ namespace Microsoft.Extensions.DependencyInjection
|
||||||
else
|
else
|
||||||
{ // No Roles
|
{ // No Roles
|
||||||
Type userStoreType = null;
|
Type userStoreType = null;
|
||||||
var identityContext = FindGenericBaseType(contextType, typeof(IdentityDbContext<,,,,>));
|
var identityContext = FindGenericBaseType(contextType, typeof(IdentityUserContext<,,,,>));
|
||||||
if (identityContext == null)
|
if (identityContext == null)
|
||||||
{
|
{
|
||||||
// If its a custom DbContext, we can only add the default POCOs
|
// If its a custom DbContext, we can only add the default POCOs
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,140 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TUser">The type of the user objects.</typeparam>
|
||||||
|
public class IdentityUserContext<TUser> : IdentityUserContext<TUser, string> where TUser : IdentityUser
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of <see cref="IdentityUserContext{TUser}"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">The options to be used by a <see cref="DbContext"/>.</param>
|
||||||
|
public IdentityUserContext(DbContextOptions options) : base(options) { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="IdentityUserContext{TUser}" /> class.
|
||||||
|
/// </summary>
|
||||||
|
protected IdentityUserContext() { }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TUser">The type of user objects.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for users and roles.</typeparam>
|
||||||
|
public class IdentityUserContext<TUser, TKey> : IdentityUserContext<TUser, TKey, IdentityUserClaim<TKey>, IdentityUserLogin<TKey>, IdentityUserToken<TKey>>
|
||||||
|
where TUser : IdentityUser<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the db context.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">The options to be used by a <see cref="DbContext"/>.</param>
|
||||||
|
public IdentityUserContext(DbContextOptions options) : base(options) { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the class.
|
||||||
|
/// </summary>
|
||||||
|
protected IdentityUserContext() { }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Base class for the Entity Framework database context used for identity.
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="TUser">The type of user objects.</typeparam>
|
||||||
|
/// <typeparam name="TKey">The type of the primary key for users and roles.</typeparam>
|
||||||
|
/// <typeparam name="TUserClaim">The type of the user claim object.</typeparam>
|
||||||
|
/// <typeparam name="TUserLogin">The type of the user login object.</typeparam>
|
||||||
|
/// <typeparam name="TUserToken">The type of the user token object.</typeparam>
|
||||||
|
public abstract class IdentityUserContext<TUser, TKey, TUserClaim, TUserLogin, TUserToken> : DbContext
|
||||||
|
where TUser : IdentityUser<TKey>
|
||||||
|
where TKey : IEquatable<TKey>
|
||||||
|
where TUserClaim : IdentityUserClaim<TKey>
|
||||||
|
where TUserLogin : IdentityUserLogin<TKey>
|
||||||
|
where TUserToken : IdentityUserToken<TKey>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="options">The options to be used by a <see cref="DbContext"/>.</param>
|
||||||
|
public IdentityUserContext(DbContextOptions options) : base(options) { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the class.
|
||||||
|
/// </summary>
|
||||||
|
protected IdentityUserContext() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="DbSet{TEntity}"/> of Users.
|
||||||
|
/// </summary>
|
||||||
|
public DbSet<TUser> Users { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User claims.
|
||||||
|
/// </summary>
|
||||||
|
public DbSet<TUserClaim> UserClaims { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User logins.
|
||||||
|
/// </summary>
|
||||||
|
public DbSet<TUserLogin> UserLogins { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the <see cref="DbSet{TEntity}"/> of User tokens.
|
||||||
|
/// </summary>
|
||||||
|
public DbSet<TUserToken> UserTokens { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Configures the schema needed for the identity framework.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="builder">
|
||||||
|
/// The builder being used to construct the model for this context.
|
||||||
|
/// </param>
|
||||||
|
protected override void OnModelCreating(ModelBuilder builder)
|
||||||
|
{
|
||||||
|
builder.Entity<TUser>(b =>
|
||||||
|
{
|
||||||
|
b.HasKey(u => u.Id);
|
||||||
|
b.HasIndex(u => u.NormalizedUserName).HasName("UserNameIndex").IsUnique();
|
||||||
|
b.HasIndex(u => u.NormalizedEmail).HasName("EmailIndex");
|
||||||
|
b.ToTable("AspNetUsers");
|
||||||
|
b.Property(u => u.ConcurrencyStamp).IsConcurrencyToken();
|
||||||
|
|
||||||
|
b.Property(u => u.UserName).HasMaxLength(256);
|
||||||
|
b.Property(u => u.NormalizedUserName).HasMaxLength(256);
|
||||||
|
b.Property(u => u.Email).HasMaxLength(256);
|
||||||
|
b.Property(u => u.NormalizedEmail).HasMaxLength(256);
|
||||||
|
|
||||||
|
// Replace with b.HasMany<IdentityUserClaim>().
|
||||||
|
b.HasMany<TUserClaim>().WithOne().HasForeignKey(uc => uc.UserId).IsRequired();
|
||||||
|
b.HasMany<TUserLogin>().WithOne().HasForeignKey(ul => ul.UserId).IsRequired();
|
||||||
|
b.HasMany<TUserToken>().WithOne().HasForeignKey(ut => ut.UserId).IsRequired();
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Entity<TUserClaim>(b =>
|
||||||
|
{
|
||||||
|
b.HasKey(uc => uc.Id);
|
||||||
|
b.ToTable("AspNetUserClaims");
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Entity<TUserLogin>(b =>
|
||||||
|
{
|
||||||
|
b.HasKey(l => new { l.LoginProvider, l.ProviderKey });
|
||||||
|
b.ToTable("AspNetUserLogins");
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.Entity<TUserToken>(b =>
|
||||||
|
{
|
||||||
|
b.HasKey(l => new { l.UserId, l.LoginProvider, l.Name });
|
||||||
|
b.ToTable("AspNetUserTokens");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.InMemory.Test
|
||||||
}
|
}
|
||||||
|
|
||||||
public class InMemoryContext<TUser> :
|
public class InMemoryContext<TUser> :
|
||||||
IdentityDbContext<TUser, string>
|
IdentityUserContext<TUser, string>
|
||||||
where TUser : IdentityUser
|
where TUser : IdentityUser
|
||||||
{
|
{
|
||||||
public InMemoryContext(DbContextOptions options) : base(options)
|
public InMemoryContext(DbContextOptions options) : base(options)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Identity.EntityFrameworkCore.Test
|
||||||
return TestPlatformHelper.IsMono || !TestPlatformHelper.IsWindows;
|
return TestPlatformHelper.IsMono || !TestPlatformHelper.IsWindows;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TestUserDbContext : IdentityDbContext<TUser, TKey>
|
public class TestUserDbContext : IdentityUserContext<TUser, TKey>
|
||||||
{
|
{
|
||||||
public TestUserDbContext(DbContextOptions options) : base(options) { }
|
public TestUserDbContext(DbContextOptions options) : base(options) { }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue