用asp.net core 2.0 + EFCore.Sqlite做个小网站
许久没用C#写程序。听说进来发生大事,.NetCore2.0发布了,于是便学习了下,本站也应运而生。
大多数的地方按照官方的文档起步走就可以了,这里谈谈遇到的几个坑。
首先,本站是基于ASP.NetCore2.0和EntityFrameWorkCore.Sqlite的,前端使用了layui,搭建于CentOS7上。
ASP.NetCore部分没有什么难度,选择MVC方式,基本上和原来的asp.net mvc差不多。不过我也是很久没有用过mvc了,所以摸索了一下,tagHelper很好用。
主要说说EFC,目前是EFC2.0,不支持延迟查询,所以每一个表关联查询需要Include()。然后表关联上也不能用多对多,不过多对多的地方可以加中间类来解决。
比如一篇文章有多个分类,而一个分类也有多篇文章。这里用到了多对多的关联,所以我增加了一个中间关联的类型,包含文章和分类的ID。用两个一对多的关联,规避了多对多的关联。
EF还有一个控制台命令 dotnet ef
使.NetCore2.0网站项目支持EF.Sqlite
1)添加appsettings.json,并配置sqlite的连接字符串
"sqlitedb": "Filename=./sqlitedb.db"
注意appsettings.json添加完之后设置属性为复制到输出目录
2)在Startup中启用服务
添加引用:
using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
添加属性:
public IConfiguration Configuration { get; set; }
添加构造:
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
在ConfigureServices()启用:
var connection = Configuration.GetConnectionString("sqlitedb");
services.AddDbContextPool<DataContext>(options => options.UseSqlite(connection));
此时缺少DataContext类,新建之在Data文件夹下
支持Identity
1)编辑DataContext
添加引用:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
继承IdentityDbContext<User>
添加非默认构造函数:
public DataContext(DbContextOptions<DataContext> options)
: base(options)
{
}
2)此时缺少User类,新建之在Model文件夹下,并继承自IdentityUser
在User类中添加引用:
using Microsoft.AspNetCore.Identity;
3)在Startup类中
ConfigureServices()里启动服务:
services.AddMvc();
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<DataContext>().AddDefaultTokenProviders();
在Pipeline的Configure()函数中进行身份验证:
app.UseAuthentication();
此后可以在Controller里使用[Authorize]标签验证登录身份了
使用EF工具生成数据库结构
1)右键编辑项目文件csproj
在ItemGroup中添加
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
2)打开项目所在目录,按住shift后右键呼出菜单打开命令行
在命令行中输入:
dotnet ef migrations add InitialCreate
名称可替换
如果遇到错误,请分析错误原因
之后会在项目下生成一个Migrations文件包含了数据库结构相关代码
输入下面命令并回车,使之生效:
dotnet ef database update
然后就会出现appsettings.json中配置的数据库文件.
用asp.net core 2.0 + EFCore.Sqlite做个小网站的更多相关文章
- .Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南
ASP.NET Core 2.0 发布日期:2017年8月14日 ASP.NET团队宣布ASP.NET Core 2.0正式发布,发布Visual Studio 2017 15.3支持ASP.NET ...
- 从头编写 asp.net core 2.0 web api 基础框架 (3)
第一部分:http://www.cnblogs.com/cgzl/p/7637250.html 第二部分:http://www.cnblogs.com/cgzl/p/7640077.html 之前我介 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (3)
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...
- 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratc ...
- 【原生态跨平台:ASP.NET Core 1.0(非Mono)在 Ubuntu 14.04 服务器上一对一的配置实现-篇幅1】
鸡冻人心的2016,微软高产年. build 2016后 各种干货层出不穷. 1 Win10 集成了bash ,实现了纳德拉的成诺,Microsoft Love Linux!!! 2 跨平台 ,收 ...
- Amazing ASP.NET Core 2.0
前言 ASP.NET Core 的变化和发展速度是飞快的,当你发现你还没有掌握 ASP.NET Core 1.0 的时候, 2.0 已经快要发布了,目前 2.0 处于 Preview 1 版本,意味着 ...
- Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录
1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...
- ASP.NET Core 2.0 MVC项目实战
一.前言 毕业后入职现在的公司快有一个月了,公司主要的产品用的是C/S架构,再加上自己现在还在学习维护很老的delphi项目,还是有很多不情愿的.之前实习时主要是做.NET的B/S架构的项目,主要还是 ...
随机推荐
- python获取目录下所有文件
#方法1:使用os.listdir import os for filename in os.listdir(r'c:\\windows'): print filename #方法2:使用glob模块 ...
- 控件无法安装的问题-Unable to execute file
官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpaster/ 产品介绍:http://www.cnblogs.com ...
- html 源码 引入样式
post-title2 示例 sdf post-title 示例
- (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )
http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others) Memo ...
- (线段树) I Hate It --hdu--1754 (入门)
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1754 这次的代码和上个代码很相似,只不过上次的节点里存的是sum值,这次节点里存放的是Max, 正在慢慢 ...
- 在 JNI 编程中避免内存泄漏与崩溃
JNI 编程简介 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中 ...
- Linux 用 sftp scp命令 互传文件
sftp它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性. sftp 是SSH服务的子程序 常用命令 pwd 查看当前工作目录 ls 查看远程当前目录下的所以文件或者目录信息 lls 查看 ...
- setTimeout问题
function fn(argu1){ alert(argu1); } setTimeout(fn, 1000, 12); setTimeout从第三个参数开始,之后的参数都是fn的.fn不用加(), ...
- 好用的SHELL小编程
1>判断输入为数字,字符或其他 脚本代码: 检测结果: 2>求平均数: 测试效果: 3>自减输出: 脚本代码: 测试效果: 4>在文件 ...
- java反射中的动态代理机制(有实例)
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...