要解决ASP.NET Identity要求使用位于App_Data文件夹中的本地数据库的问题,可以按照以下步骤进行操作:
首先,确保你的项目中已经包含了App_Data文件夹。如果没有,请在项目中创建一个名为App_Data的文件夹。
在App_Data文件夹中创建一个本地数据库文件。可以使用Visual Studio的Server Explorer或SQL Server Management Studio等工具来创建数据库文件。将数据库文件命名为你想要的名称,例如"IdentityDB.mdf"。
在你的项目中打开Web.config文件,找到连接字符串配置节。在该配置节中,添加一个连接字符串,指向你刚刚创建的本地数据库文件。示例代码如下:
请注意,上述示例中的连接字符串使用了LocalDb,你也可以根据需要更改为其他数据库引擎。
using System.Data.Entity;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
namespace YourNamespace
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
// 使用上述连接字符串初始化IdentityDbContext
ApplicationDbContext context = new ApplicationDbContext();
context.Database.Initialize(true);
// 确保在应用程序启动时创建默认用户和角色
CreateDefaultRolesAndUsers(context);
// 省略其他的Application_Start代码
}
private void CreateDefaultRolesAndUsers(ApplicationDbContext context)
{
// 创建RoleManager和UserManager实例
var roleManager = new RoleManager(new RoleStore(context));
var userManager = new UserManager(new UserStore(context));
// 创建默认角色和用户
if (!roleManager.RoleExists("Admin"))
{
var role = new IdentityRole("Admin");
roleManager.Create(role);
var user = new ApplicationUser { UserName = "admin@example.com", Email = "admin@example.com" };
var result = userManager.Create(user, "P@ssw0rd");
if (result.Succeeded)
{
userManager.AddToRole(user.Id, "Admin");
}
}
}
}
}
上述代码示例了如何在应用程序启动时创建一个新的IdentityDbContext实例,并使用上述连接字符串进行初始化。还示例了如何创建一个名为"Admin"的默认角色和一个带有管理员权限的默认用户。
通过以上步骤,你应该能够成功地配置ASP.NET Identity使用位于App_Data文件夹中的本地数据库。