1.asp.net mvc自带的权限表的创建是在InitializeSimpleMembershipAttribute.cs中实现的。
2.InitializeSimpleMembershipAttribute.cs
using System; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Threading; using System.Web.Mvc; using WebMatrix.WebData; using FindU1.Models; namespace FindU1.Filters { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute { private static SimpleMembershipInitializer _initializer; private static object _initializerLock = new object(); private static bool _isInitialized; public override void OnActionExecuting(ActionExecutingContext filterContext) { // Ensure ASP.NET Simple Membership is initialized only once per app start LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); } private class SimpleMembershipInitializer { public SimpleMembershipInitializer() { Database.SetInitializer<UserContext>(null); try { using (var context = new UserContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } //Web.config中的配置,前四个参数分别是数据库连接ConnectionString,表名称,UserId,UserName(对应的数据库中的字段) WebSecurity.InitializeDatabaseConnection("UserContext", "Users", "UserID", "Email", autoCreateTables: true); } catch (Exception ex) { throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); } } } } }
<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-FindU1-20130720205848;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-FindU1-20130720205848.mdf" providerName="System.Data.SqlClient" /> <add name="UserContext" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=UserContext-20130721150726; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|UserContext-20130721150726.mdf" providerName="System.Data.SqlClient" /> </connectionStrings>
<compilation debug="true" targetFramework="4.5"> <assemblies> <add assembly="WebMatrix.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add assembly="WebMatrix.WebData, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> </assemblies> </compilation>