.net MVC使用数据库进行简单成员身份validation

使用Code First Entity Framework和.NET MVC 4我创建了一个新的Web应用程序,并用对象填充数据库,如下所示。

public class GratifyGamingContext : DbContext { public DbSet Games { get; set; } public DbSet Genres { get; set; } public DbSet UserRepository { get; set; } } 

我想使用我的UserRepository表而不是AccountModel.cs中的内置UserContext类来进行我的用户帐户访问,因为我无法使用现有的dbContext进行工作。

  public class UsersContext : DbContext { public UsersContext() : base("DefaultConnection") { } public DbSet UserProfiles { get; set; } } [Table("UserProfile")] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserId { get; set; } public string UserName { get; set; } } 

从InitializeSimpleMembershipAttribute.cs构造SimpleMembershipInitializer对象时,我的程序总是崩溃。 我已经注释掉了我觉得应该无关的代码。

  [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(null); try { using (var context = new GratifyGamingContext()) { if (!context.Database.Exists()) { // Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); } } WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", 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); } } } } 

我的ConnectionString如下:

  

从任何AccountController页面调用WebSecurity.InitializeDatabaseConnect时出现以下错误:

[SqlException(0x80131904):文件“C:\ Users \ Unreal \ Documents \ Visual Studio 2010 \ Projects \ GratifyGaming \ GratifyGaming.WebUI \ App_Data \ Games.mdf”的目录查找失败,出现操作系统错误2(无法检索此错误的文字。原因:15105)。 无法将文件’C:\ Users \ Unreal \ Documents \ Visual Studio 2010 \ Projects \ GratifyGaming \ GratifyGaming.WebUI \ App_Data \ Games.mdf’附加为数据库’aspnet-GratifyGaming-20120917185558’。]

[TargetInvocationException:调用目标抛出了exception。] System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,Boolean publicOnly,Boolean noCheck,Boolean&canBeCached,RuntimeMethodHandleInternal&ctor,Boolean&bNeedSecurityCheck)+0

如果我没有去任何AccountController驱动页面,我的应用程序将连接到数据库。 如何配置此应用程序以使用我的UserRepository表而不是UsersContext用于用户成员身份?

从web.config中的DefaultConnectionString中删除AttachDbFileName

  

调用Global.asax.cs中的WebSecurity.InitialiseDatabase方法

  public class MvcApplication : System.Web.HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); Database.SetInitializer(new DatabaseInitializer()); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); AuthConfig.RegisterAuth(); WebSecurity.InitializeDatabaseConnection( connectionStringName: "DefaultConnection", userTableName: "UserProfile", userIdColumn: "UserID", userNameColumn: "UserName", autoCreateTables: true); } } 

在AccountController.cs中注释掉[InitializeSimpleMembership]

  [Authorize] //[InitializeSimpleMembership] public class AccountController : Controller