用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架构的项目,主要还是 ...
随机推荐
- 33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距
33. Pay Gap for the Brightest Female Graduatea 最聪明的大学女毕业生面临的工资差距 ① When young women were found to ma ...
- HDU 2161 Primes (素数筛选法)
题意:输入一个数判断是不是素数,并规定2不是素数. 析:一看就很简单吧,用素数筛选法,注意的是结束条件是n<0,一开始被坑了... 不说了,直接上代码: #include <iostrea ...
- UVa 11732 "strcmp()" Anyone? (左儿子右兄弟前缀树Trie)
题意:给定strcmp函数,输入n个字符串,让你用给定的strcmp函数判断字符比较了多少次. 析:题意不理解的可以阅读原题https://uva.onlinejudge.org/index.php? ...
- VHDL数据类型
VHDL表示16进制 如 a : std_logic_vector(7 downto 0) 把0x55赋给a a <= x"55"; b表示二进制 b“1011_1111” ...
- cocos2dx lua 图片去色shader
function FreeCardTool:setNodeGray(node) local vertShaderByteArray = "\n".. "attribute ...
- spring的事务传播属性
一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...
- radom
radom模块提供了随机生成对象的方法 Help on module random: NAME random - Random variable generators. FILE /usr/local ...
- TSQL--按某字段列分组,在将各组中某列合并成一行
鉴于群里很多同事在问这个问题,我简单写个Demo,希望对初学者有帮助! 无真相,无解说,不解释,直接上Code! --========================================= ...
- HLSL-高级着色语言简介【转】
HLSL-High Level Shader Language 优点 用来书写Vertex Shader和Pixel Shader程序的代码,语法类似于C/C++,在DirectX 8.x的时代,Sh ...
- UEditor编辑器两个版本任意文件上传漏洞分析
0x01 前言 UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点 ,被广大WEB应用程序所使用:本次爆出的高危漏洞属于.NET版本,其它的 ...