Updating MusicStore.Spa for EF and Identity changes

This commit is contained in:
DamianEdwards 2014-10-15 18:27:34 -07:00
parent 41e8d22d3a
commit bc1994eebd
6 changed files with 49 additions and 86 deletions

View File

@ -4,9 +4,6 @@
"Data": {
"DefaultConnection": {
"Connectionstring": "Server=(localdb)\\MSSQLLocalDB;Database=MusicStoreSpa;Trusted_Connection=True;"
},
"IdentityConnection": {
"Connectionstring": "Server=(localdb)\\MSSQLLocalDB;Database=MusicStoreSpaIdentity;Trusted_Connection=True;"
}
}
}

View File

@ -1,26 +0,0 @@
using System;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Data.Entity;
using Microsoft.Framework.OptionsModel;
namespace MusicStore.Models
{
public class ApplicationUser : IdentityUser { }
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(IServiceProvider serviceProvider, IOptions<IdentityDbContextOptions> optionsAccessor)
: base(serviceProvider, optionsAccessor.Options)
{
}
}
public class IdentityDbContextOptions : DbContextOptions
{
public string DefaultAdminUserName { get; set; }
public string DefaultAdminPassword { get; set; }
}
}

View File

@ -1,14 +1,18 @@
using System;
using System.Linq;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Data.Entity;
using Microsoft.Data.Entity.Metadata;
using Microsoft.Framework.OptionsModel;
namespace MusicStore.Models
{
public class MusicStoreContext : DbContext
public class ApplicationUser : IdentityUser { }
public class MusicStoreContext : IdentityDbContext<ApplicationUser>
{
public MusicStoreContext(IServiceProvider serviceProvider, IOptions<MusicStoreDbContextOptions> optionsAccessor)
public MusicStoreContext(IServiceProvider serviceProvider, IOptions<DbContextOptions<MusicStoreContext>> optionsAccessor)
: base(serviceProvider, optionsAccessor.Options)
{
@ -35,13 +39,13 @@ namespace MusicStore.Models
builder.Entity<Album>().Key(a => a.AlbumId);
builder.Entity<Artist>().Key(a => a.ArtistId);
builder.Entity<Order>(
b =>
{
b.Key(o => o.OrderId);
b.Property(o => o.OrderId)
.ForRelational().Column("[Order]");
});
builder.Entity<Order>(b =>
{
b.Key(o => o.OrderId);
b.Property(o => o.OrderId)
.ForRelational()
.Column("[Order]");
});
builder.Entity<Genre>().Key(g => g.GenreId);
builder.Entity<CartItem>().Key(ci => ci.CartItemId);
@ -53,16 +57,16 @@ namespace MusicStore.Models
builder.Entity<Genre>().Property(g => g.GenreId).GenerateValuesOnAdd(generateValues: false);
builder.Entity<Album>(b =>
{
b.ForeignKey<Genre>(a => a.GenreId);
b.ForeignKey<Artist>(a => a.ArtistId);
});
{
b.ForeignKey<Genre>(a => a.GenreId);
b.ForeignKey<Artist>(a => a.ArtistId);
});
builder.Entity<OrderDetail>(b =>
{
b.ForeignKey<Album>(a => a.AlbumId);
b.ForeignKey<Order>(a => a.OrderId);
});
{
b.ForeignKey<Album>(a => a.AlbumId);
b.ForeignKey<Order>(a => a.OrderId);
});
var genre = builder.Model.GetEntityType(typeof(Genre));
var album = builder.Model.GetEntityType(typeof(Album));
@ -72,11 +76,8 @@ namespace MusicStore.Models
album.AddNavigation("OrderDetails", orderDetail.ForeignKeys.Single(k => k.ReferencedEntityType == album), pointsToPrincipal: false);
album.AddNavigation("Genre", album.ForeignKeys.Single(k => k.ReferencedEntityType == genre), pointsToPrincipal: true);
album.AddNavigation("Artist", album.ForeignKeys.Single(k => k.ReferencedEntityType == artist), pointsToPrincipal: true);
base.OnModelCreating(builder);
}
}
public class MusicStoreDbContextOptions : DbContextOptions
{
}
}

View File

@ -6,8 +6,9 @@ using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.Data.Entity;
using Microsoft.Data.Entity.SqlServer;
using Microsoft.Framework.OptionsModel;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.OptionsModel;
using MusicStore.Spa;
namespace MusicStore.Models
{
@ -25,29 +26,12 @@ namespace MusicStore.Models
if (await db.Database.EnsureCreatedAsync())
{
await InsertTestData(serviceProvider);
}
}
else
{
await InsertTestData(serviceProvider);
}
}
}
public static async Task InitializeIdentityDatabaseAsync(IServiceProvider serviceProvider)
{
using (var db = serviceProvider.GetService<ApplicationDbContext>())
{
var sqlServerDataStore = db.Configuration.DataStore as SqlServerDataStore;
if (sqlServerDataStore != null)
{
if (await db.Database.EnsureCreatedAsync())
{
await CreateAdminUser(serviceProvider);
}
}
else
{
await InsertTestData(serviceProvider);
await CreateAdminUser(serviceProvider);
}
}
@ -55,7 +39,7 @@ namespace MusicStore.Models
private static async Task CreateAdminUser(IServiceProvider serviceProvider)
{
var options = serviceProvider.GetService<IOptions<IdentityDbContextOptions>>().Options;
var settings = serviceProvider.GetService<IOptions<SiteSettings>>().Options;
const string adminRole = "Administrator";
var userManager = serviceProvider.GetService<UserManager<ApplicationUser>>();
@ -66,11 +50,11 @@ namespace MusicStore.Models
await roleManager.CreateAsync(new IdentityRole(adminRole));
}
var user = await userManager.FindByNameAsync(options.DefaultAdminUserName);
var user = await userManager.FindByNameAsync(settings.DefaultAdminUsername);
if (user == null)
{
user = new ApplicationUser { UserName = options.DefaultAdminUserName };
await userManager.CreateAsync(user, options.DefaultAdminPassword);
user = new ApplicationUser { UserName = settings.DefaultAdminUsername };
await userManager.CreateAsync(user, settings.DefaultAdminPassword);
await userManager.AddToRoleAsync(user, adminRole);
await userManager.AddClaimAsync(user, new Claim("ManageStore", "Allowed"));
}

View File

@ -0,0 +1,10 @@
using System;
namespace MusicStore.Spa
{
public class SiteSettings
{
public string DefaultAdminUsername { get; set; }
public string DefaultAdminPassword { get; set; }
}
}

View File

@ -27,29 +27,27 @@ namespace MusicStore.Spa
public void ConfigureServices(IServiceCollection services)
{
// Add options accessors to the service container
services.Configure<IdentityDbContextOptions>(options =>
services.Configure<SiteSettings>(settings =>
{
options.DefaultAdminUserName = Configuration.Get("DefaultAdminUsername");
options.DefaultAdminPassword = Configuration.Get("DefaultAdminPassword");
options.UseSqlServer(Configuration.Get("Data:IdentityConnection:ConnectionString"));
settings.DefaultAdminUsername = Configuration.Get("DefaultAdminUsername");
settings.DefaultAdminPassword = Configuration.Get("DefaultAdminPassword");
});
services.Configure<MusicStoreDbContextOptions>(options =>
options.UseSqlServer(Configuration.Get("Data:DefaultConnection:ConnectionString")));
// Add MVC services to the service container
services.AddMvc();
// Add EF services to the service container
services.AddEntityFramework()
.AddSqlServer();
.AddSqlServer()
.AddDbContext<MusicStoreContext>(options =>
{
options.UseSqlServer(Configuration.Get("Data:DefaultConnection:ConnectionString"));
});
// Add Identity services to the services container
services.AddDefaultIdentity<ApplicationDbContext, ApplicationUser, IdentityRole>(Configuration);
services.AddDefaultIdentity<MusicStoreContext, ApplicationUser, IdentityRole>(Configuration);
// Add application services to the service container
services.AddScoped<MusicStoreContext>();
services.AddTransient(typeof(IHtmlHelper<>), typeof(AngularHtmlHelper<>));
}
@ -57,7 +55,6 @@ namespace MusicStore.Spa
{
// Initialize the sample data
SampleData.InitializeMusicStoreDatabaseAsync(app.ApplicationServices).Wait();
SampleData.InitializeIdentityDatabaseAsync(app.ApplicationServices).Wait();
// Configure the HTTP request pipeline