用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架构的项目,主要还是 ...
随机推荐
- 2018.09.14 codechef Milestone(随机化算法)
传送门 由于存在不超过7条直线可以覆盖超过所有的点. 所以如果我们随机选点的话(每次随机两个) 那么得到的解恰好为最优解的概率是149" role="presentation&qu ...
- 2018.07.27 bzoj3064: Tyvj 1518 CPU监控(线段树)
传送门 线段树好题. 维护区间加,区间覆盖,区间最大,区间历史最大. 这个东西在国家集训队2016论文集之<区间最值操作与历史最值问题--杭州学军中学 吉如一>中讲的已经很详细了. 简单来 ...
- 第三章 形容词(Les adjectifs)
★形容词的性(Le genre de l'adjectif ) ()一般规则是在阳性形容词后加-e: français ➞francaise法国的 content ➞c ...
- Django入门与实践-第18章:访问已登录用户(完结)
http://127.0.0.1:8000/boards/1/topics/1/ #boards/views.py @login_required def new_topic(request, pk) ...
- s111 stark组件
内容回顾: 1. 类当做key 2. django中的model所在app名称.以及小写类名. def index(request): # print(m1.UserInfo,m1.UserInfo. ...
- linux下mysql命令大全
1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mys ...
- Tensorflow currently has no official prebuild for your CUDA, cuDNN combination.
INFO CUDA version: 10. ERROR cuDNN not found. See https://github.com/deepfakes/faceswap/blob/master/ ...
- centos yum command
yum repolist all -- 列出所有仓库 yum list all -- 列出仓库中所有软件包 yum info package-name -- 查看软件包信息 yum install p ...
- The First Android App----Adding the Action Bar
In its most basic form, the action bar displays the title for the activity and the app icon on the l ...
- centos7 源码安装python3
1.非常重要!必须得先安装py3所依赖的软件包,否则可能会出现py3安装成功,却缺少相应的pip yum groupinstall "Development tools" yum ...