zoukankan      html  css  js  c++  java
  • 用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中配置的数据库文件.

  • 相关阅读:
    数据类型
    java基础
    Codeforces Round #655 (Div. 2) B. Omkar and Last Class of Math(数论)
    Codeforces Round #655 (Div. 2) A. Omkar and Completion(构造)
    LibreOJ
    QT入门-QMainWindow类
    WCF 请求与响应参数大小设置
    Python 代码性能优化技巧
    lists,tuples and sets of Python
    SQL Language
  • 原文地址:https://www.cnblogs.com/pasoraku/p/7661861.html
Copyright © 2011-2022 走看看