aspnetcore/test/Microsoft.AspNet.Identity.E.../InMemoryContext.cs

94 lines
3.3 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. 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.Data.Entity;
using Microsoft.Data.Entity.Metadata;
namespace Microsoft.AspNet.Identity.EntityFramework.InMemory.Test
{
public class InMemoryContext :
InMemoryContext<IdentityUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
public InMemoryContext() { }
public InMemoryContext(IServiceProvider serviceProvider) : base(serviceProvider) { }
}
public class InMemoryContext<TUser> :
InMemoryContext<TUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
where TUser : IdentityUser
{
public InMemoryContext() { }
public InMemoryContext(IServiceProvider serviceProvider) : base(serviceProvider) { }
}
public class InMemoryContext<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim> : DbContext
where TUser : IdentityUser<TKey>
where TRole : IdentityRole<TKey>
where TUserLogin : IdentityUserLogin<TKey>
where TUserRole : IdentityUserRole<TKey>
where TUserClaim : IdentityUserClaim<TKey>
where TKey : IEquatable<TKey>
{
public DbSet<TUser> Users { get; set; }
public DbSet<TRole> Roles { get; set; }
public DbSet<IdentityRoleClaim> RoleClaims { get; set; }
public InMemoryContext(IServiceProvider serviceProvider)
: base(serviceProvider) { }
public InMemoryContext() { }
protected override void OnConfiguring(DbContextOptions builder)
{
// Want fresh in memory store for tests always for now
builder.UseInMemoryStore(persist: false);
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<TUser>(b =>
{
b.Key(u => u.Id);
b.Property(u => u.UserName);
b.ToTable("AspNetUsers");
});
builder.Entity<TRole>(b =>
{
b.Key(r => r.Id);
b.ToTable("AspNetRoles");
});
builder.Entity<TUserRole>(b =>
{
b.Key(r => new { r.UserId, r.RoleId });
b.ForeignKeys(fk => fk.ForeignKey<TUser>(f => f.UserId));
b.ForeignKeys(fk => fk.ForeignKey<TRole>(f => f.RoleId));
b.ToTable("AspNetUserRoles");
});
builder.Entity<TUserLogin>(b =>
{
b.Key(l => new { l.LoginProvider, l.ProviderKey, l.UserId });
b.ForeignKeys(fk => fk.ForeignKey<TUser>(f => f.UserId));
b.ToTable("AspNetUserLogins");
});
builder.Entity<TUserClaim>(b =>
{
b.Key(c => c.Id);
b.ForeignKeys(fk => fk.ForeignKey<TUser>(f => f.UserId));
b.ToTable("AspNetUserClaims");
});
builder.Entity<IdentityRoleClaim<TKey>>(b =>
{
b.Key(c => c.Id);
b.ForeignKeys(fk => fk.ForeignKey<TRole>(f => f.RoleId));
b.ToTable("AspNetRoleClaims");
});
}
}
}