开发环境:vs2017 版本:15.3.5
项目环境:.net framework 4.6.1 模板asp.net core 2.0 Web应用程序(模型视图控制器)
身份验证:个人用户账号 存储应用内的用户帐户
因为本人并不涉及开发一些中、大规模的应用,所以习惯使用本地数据库,而不是数据库服务,为了方便管理,所以本人的所有项目都是离线数据库文件存储(.mdf)。
下面开始:
一、修改数据库连接。
1、相对路径:
修改appsettings.json文件中的"ConnectionStrings"(第3行)
"DefaultConnection": "Data Source=(localdb)\\mssqllocaldb;AttachDbFilename=%CONTENTROOTPATH%\\App_Data\\aspnet123.mdf;Integrated Security=True;Connect Timeout=30;MultipleActiveResultSets=true”
需注意的是:AttachDbFilename=%CONTENTROOTPATH%\\App_Data\\aspnet123.mdf;
使用 ContentRootPath 是将文件放置在项目目录下而不是wwwroot目录下,这样更安全。
ContentRootPath 用于包含应用程序文件。
WebRootPath ?用于包含Web服务性的内容文件。
实际使用区别如下:
ContentRoot: ?C:\MyApp\
WebRoot: ?????C:\MyApp\wwwroot\
2、修改Startup.cs
自动生成的原始代码:
public class Startup ???{ ???????public Startup(IConfiguration configuration) ???????{ ???????????Configuration = configuration; ???????} ???????public IConfiguration Configuration { get; } ???????// This method gets called by the runtime. Use this method to add services to the container. ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????services.AddDbContext<ApplicationDbContext>(options => ???????????????options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); ???????????services.AddIdentity<ApplicationUser, IdentityRole>() ???????????????.AddEntityFrameworkStores<ApplicationDbContext>() ???????????????.AddDefaultTokenProviders(); ???????????// Add application services. ???????????services.AddTransient<IEmailSender, EmailSender>(); ???????????services.AddMvc(); ???????} ???????// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. ???????public void Configure(IApplicationBuilder app, IHostingEnvironment env) ???????{ ???????????if (env.IsDevelopment()) ???????????{ ???????????????app.UseDeveloperExceptionPage(); ???????????????app.UseBrowserLink(); ???????????????app.UseDatabaseErrorPage(); ???????????} ???????????else ???????????{ ???????????????app.UseExceptionHandler("/Home/Error"); ???????????} ???????????app.UseStaticFiles(); ???????????app.UseAuthentication(); ???????????app.UseMvc(routes => ???????????{ ???????????????routes.MapRoute( ???????????????????name: "default", ???????????????????template: "{controller=Home}/{action=Index}/{id?}"); ???????????}); ???????} ???}
修改后的代码:
①修改Startup方法为如下
public Startup(IConfiguration configuration,IHostingEnvironment env) ???????{ ???????????Configuration = configuration;
???????????//新添加 ???????????_env = env; ???????}
②添加public IHostingEnvironment _env { get; }
③修改ConfigureServices方法
注销掉原有的services.AddDbContext
//添加修改()声明变量conn并做相应处理
string conn = Configuration.GetConnectionString("DefaultConnection");
if (conn.Contains("%CONTENTROOTPATH%"))
???{
?????conn = conn.Replace("%CONTENTROOTPATH%", _env.ContentRootPath);
????}
//修改默认的连接服务为conn
services.AddDbContext<ApplicationDbContext>(options =>
??????options.UseSqlServer(conn));
修改完成后的代码:
public class Startup ???{ ???????public Startup(IConfiguration configuration, IHostingEnvironment env) ???????{ ???????????Configuration = configuration; ???????????//新添加 ???????????_env = env; ???????} ???????public IConfiguration Configuration { get; } ???????//新添加 ???????public IHostingEnvironment _env { get; } ???????// This method gets called by the runtime. Use this method to add services to the container. ???????public void ConfigureServices(IServiceCollection services) ???????{ ???????????//services.AddDbContext<ApplicationDbContext>(options => ???????????// ???options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); ???????????//添加修改()声明变量conn并做相应处理 ???????????string conn = Configuration.GetConnectionString("DefaultConnection"); ???????????if (conn.Contains("%CONTENTROOTPATH%")) ???????????{ ???????????????conn = conn.Replace("%CONTENTROOTPATH%", _env.ContentRootPath); ???????????} ???????????//修改默认的连接服务为conn ???????????services.AddDbContext<ApplicationDbContext>(options => ?????????????????????options.UseSqlServer(conn)); ???????????services.AddIdentity<ApplicationUser, IdentityRole>() ???????????????.AddEntityFrameworkStores<ApplicationDbContext>() ???????????????.AddDefaultTokenProviders(); ???????????// Add application services. ???????????services.AddTransient<IEmailSender, EmailSender>(); ???????????services.AddMvc(); ???????} ???????// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. ???????public void Configure(IApplicationBuilder app, IHostingEnvironment env) ???????{ ???????????if (env.IsDevelopment()) ???????????{ ???????????????app.UseDeveloperExceptionPage(); ???????????????app.UseBrowserLink(); ???????????????app.UseDatabaseErrorPage(); ???????????} ???????????else ???????????{ ???????????????app.UseExceptionHandler("/Home/Error"); ???????????} ???????????app.UseStaticFiles(); ???????????app.UseAuthentication(); ???????????app.UseMvc(routes => ???????????{ ???????????????routes.MapRoute( ???????????????????name: "default", ???????????????????template: "{controller=Home}/{action=Index}/{id?}"); ???????????}); ???????} ???}
3、手动在项目中添加“App_data”文件夹,并复制粘贴一个标准的内容为空的.mdf文件。
为方便大家学习我这里为大家提供了示例数据库。
ASP.net core 2.0.0 ?中 asp.net identity 2.0.0 的基本使用(一)
原文地址:http://www.cnblogs.com/chonghanyu/p/7651692.html