.net framework 命令行项目使用 sqlite,DbContext

这篇具有很好参考价值的文章主要介绍了.net framework 命令行项目使用 sqlite,DbContext。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实际操作

环境安装

以我的环境举例

.net framwordk = 4.7.2

新建项目

.net framework 命令行项目使用 sqlite,DbContext

Nuget包安装

  • EntityFramework:数据库框架
    .net framework 命令行项目使用 sqlite,DbContext
  • SQLite.CodeFirst:实体对象转换为数据库映射关系
    .net framework 命令行项目使用 sqlite,DbContext
  • System.Data.SQLite:sqlite数据库操作

.net framework 命令行项目使用 sqlite,DbContext

Tips:SQLite内置安装包,安装该nuget回自动安装多个配套程序集

.net framework 命令行项目使用 sqlite,DbContext

安装结果
.net framework 命令行项目使用 sqlite,DbContext

三者之间的关系

EF:ORM操作框架,但不包括数据库基本操作(我感觉默认自带sql server数据库操作)
Sqlite:Sqlite数据库操作,EF接管
Sqlite.CodeFirst:自动从实体类转换成sqlite表对象

ORM解释

ORM,又称对象关系数据库。在ORM里面认为,我们操作的对象属性和数据库里面的列的定义是对应的。比如一个Student类,有id,name,age,sex等属性,那么我们C#程序中的类也有id,name,age,sex等属性。而且我的类名和你的表名完全一致,我的数据类型和你的数据库也有对应关系(例如C#的string在数据库里面有varchar(50),varchar(max),nchar(10)等)。

项目从零开始创建过程

新建项目

.net framework 命令行项目使用 sqlite,DbContext

安装nuget

.net framework 命令行项目使用 sqlite,DbContext

DB first和Code first

这个是EF的数据库提出想法。如果程序对象和数据库对象完全一致,那么有两个问题

  • 是先设计数据库还是先设计程序对象?
  • 如果更新属性,是先设置

新建文件

新建文件和文件夹

  • DB:数据库操作
    • Entity:数据库对象,即数据表
      • Student:测试类
      • Teacher
    • Mapper:数据库业务,暂时为无
    • ORMDbContext:数据库上下文,即Sqlite数据库操作封装文件

.net framework 命令行项目使用 sqlite,DbContext

Student

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqliteTest3.DB.Entity
{
    public class Student
    {

        [Key]//主键
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//自动递增
        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }


        public int TeacherId { get; set; }
    }
}

Teacher

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqliteTest3.DB.Entity
{
    public class Teacher
    {

        [Key]//主键
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]//自动递增
        public int Id { get; set; }

        public string Name { get; set; }

        public int Age { get; set; }

        public string Sex { get; set; }
    }
}



ORMContext


using SQLite.CodeFirst;
using SqliteTest3.DB.Entity;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqliteTest3.DB
{
    public class ORMContext:DbContext
    {

        //引入数据表对象
        public DbSet<Student> Students {  get; set; }

        public DbSet<Teacher> Teachers { get; set; }



        //重载DbContext生成方法,在生成DbContext的时候执行数据库生成操作
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //注入我们设置的DbContext,判断数据库是否存在,不存在则创建对应数据库
            var sqliteConnect = new SqliteCreateDatabaseIfNotExists<ORMContext>(modelBuilder);
            //执行创建数据库对应操作
            Database.SetInitializer<ORMContext>(sqliteConnect);
        }

        //读取配置文件connectionStrings,创建数据库映射
        public ORMContext() : base("ORMContext") { }

    }
}

App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
	.......
 + <connectionStrings>
    + <add name="ORMContext" connectionString="data source=.\SqliteTest.db" providerName="System.Data.SQLite.EF6" />
 + </connectionStrings>
......
  <entityFramework>
    <providers>
      ...
      + <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  ......
</configuration>

注意,DbContext命名

.net framework 命令行项目使用 sqlite,DbContext
.net framework 命令行项目使用 sqlite,DbContext

.net framework 命令行项目使用 sqlite,DbContext

这里三者必须强制一致,不然会报错

如果报这个错误

.net framework 命令行项目使用 sqlite,DbContext
这个Bug我是不知道怎么运行出来的,因为C#你看不到源码,我就不能看到里面进行了什么操作。

.net framework 命令行项目使用 sqlite,DbContext
但是报了个找不到"System.Data.SQLite" 的操作,那么只能猜是继承的时候内置了System.Data.SQLite操作

解决方法

.net framework 命令行项目使用 sqlite,DbContext

神奇的bug

运行测试

using SqliteTest3.DB;
using SqliteTest3.DB.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SqliteTest3
{
    internal class Program
    {
        //引入DbContext
        private static ORMContext _dbContext = new ORMContext();
        static void Main(string[] args)
        {
            for(var i = 0;i < 10;i++)
            {

                _dbContext.Students.Add(new Student
                {
                    Name = "小李",
                    Age = i,
                    Sex = "男"
                });

            }

            _dbContext.SaveChanges();//保存缓存操作

            var ListRes = _dbContext.Students.Where(t=>t.Name == "小李").ToList();
        }
    }
}

运行结果,我按键截图会把临时数据显示隐藏,我就拍照了

.net framework 命令行项目使用 sqlite,DbContext

或者使用navicat 来查看数据库是否有数据

.net framework 命令行项目使用 sqlite,DbContext

基础增删改查和原生sql操作

这里使用了ES6的语法


//查List
var ListRes = _dbContext.数据表.Where(t=>判断条件).ToList();
var ListRes = _dbContext.Students.Where(t=>t.Name == "小李").ToList();

//查第一个,如果没有则返回null
var res = _dbContext.Students.Where(t=>t.Name == "小李").FirstOrDefault();

//排序
OrderBy:升序
OrderByDescending:降序
var res = _dbContext.Students.Where(t=>t.Name == "小李").OrderByDescending(t=>t.Id).ToList();
增,删,改

由于ORM是对象数据模型,所以所有的数据操作都是对一个完整的对象进行操作。EF具有缓存追踪的设置,如果你查询出来的数据进行了修改,然后保存缓存的话,就会同步更新。

 _dbContext.Students.Add(new Student
 {
     Name = "小李",
     Age = i,
     Sex = "男"
 });
 _dbContext.SaveChanges();//保存缓存操作
 var resList = _dbContext.Students.Where(t=>t.Age == 0).ToList();
//将所有年龄为0的人的名字改成"修改名称"
 resList.ForEach(item => {
     item.Name = "修改名称";
 });

 _dbContext.SaveChanges();//保存缓存操作

.net framework 命令行项目使用 sqlite,DbContext

//删除所有年龄小于5岁的人
var resList = _dbContext.Students.Where(t=>true).ToList();

resList.ForEach(t => {
    if(t.Age < 5)
    {
        _dbContext.Students.Remove(t);
    }
});

_dbContext.SaveChanges();//保存缓存操作

.net framework 命令行项目使用 sqlite,DbContext

sql语句执行
sql查询

实体查询

var res = _dbContext.Database.SqlQuery<Student>("Select * from Students").ToList();

.net framework 命令行项目使用 sqlite,DbContext
如果你要多表联查,那就没有实体对象了(因为你多表联查的列名是不固定的,动态的)

那就返回一个DataSet对象:DataSet对象不了解的可以自己搜索一下

.net framework 命令行项目使用 sqlite,DbContext

.net framework 命令行项目使用 sqlite,DbContext

sql执行/增删改
_dbContext.Database.ExecuteSqlCommand("update Students set sex = '女' where age = 6");

.net framework 命令行项目使用 sqlite,DbContext文章来源地址https://www.toymoban.com/news/detail-488784.html

到了这里,关于.net framework 命令行项目使用 sqlite,DbContext的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • asp.net core EFCore 属性配置与DbContext

    Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。用于程序中的class类和数据库中的表互相之间建立映射关系。在学习过程中,EFCore中的属性配置显的尤为重要它是学习好asp.net core的基础是配置数据库表结构的重要基石。本篇内容为

    2024年02月07日
    浏览(63)
  • C# 利用.NET 升级助手将.NET Framework项目升级为.NET 6

    .NET6 正式版本已经发布有一阵子了,今天我就体验一下如何将.NET Framework的项目升级为.NET 6. 升级条件: Windows 操作系统 .NET 6 SDK Visual Studio 2022 17.0 或更高版本 ①首先是VS2022下载,直接上微软官方网站,下载地址: https://visualstudio.microsoft.com/zh-hans/downloads/ 下载后,在线安装就

    2024年02月12日
    浏览(56)
  • VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)

    VS2015里面没有.NET Framework 4.6.2 VS2015默认安装的目标框架最高是.NET Framework 4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NET Framework 4.6.2,项目就需要升级到目标框架.NET Framework 4.6.2 VS2015项目无法选择framework 4.6.2的解决办法: 第一步:系统环境安装.NET Framework 4.6.2 官网下

    2024年02月12日
    浏览(50)
  • .NET使用一行命令轻松生成EF Core项目框架

    dotnet ef是Entity Framework Core(EF Core)的一个命令行工具,用于管理EF Core应用程序的数据库和代码。除了提供管理数据库的命令之外,dotnet ef还可以生成和管理实体和上下文代码。本文将介绍如何使用dotnet ef动态生成代码。 一、环境准备 1、项目准备 用vs2022新建一个.NET6的asp.

    2023年04月27日
    浏览(54)
  • 如何在.NET 自动安装包项目(Visual Studio Installer Projects)中设置安装包自动安装 .NET Framework环境

    如何在.NET 自动安装包项目(Visual Studio Installer Projects)中设置安装包自动安装 .NET Framework环境 ​ Microsoft Visual Studio Installer Projects是一组用于创建安装程序的工具,它是Microsoft Visual Studio的扩展。这些工具允许开发人员在Visual Studio中创建和定制安装程序,以便将他们的应用程序

    2024年02月13日
    浏览(66)
  • VS2022迁移VS2019项目遇到的.Net Framework 引用程序集问题解决方案

    在GitHub上发现TrafficMonitor的开源代码,想要自己过一遍这个项目 在VS2022上面打开出现了MSB3644错误,打开微软 “找不到项目所请求 .NET 版本的 .NET 引用程序集时,会发生此错误。 发生此问题的原因可能是项目文件存在问题,它所请求的版本无法识别或未安装;也可能是安装问

    2024年02月06日
    浏览(109)
  • 【C#】.Net Framework框架使用JWT

    2023年,第31周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 本篇文章主要简单讲讲,.Net Framework框架下使用JWT的代码例子,以及他们的基本概念。 2002年微软发布了.net framework 1.0,那个时候博主刚开始玩传奇游戏,接触电脑的时间还是挺早的。 JWT(JS

    2024年02月15日
    浏览(57)
  • .Net Framework使用Autofac实现依赖注入

    最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做一个学生信息增删改查系统。因为题目要求了用Entityframework 也就是EF 那也就不上core了,web项目也是用Framework 4.8去做的。 本文的重点是IOC容器,在Framework 中是没有自带的

    2024年02月09日
    浏览(45)
  • SignalR实战:在.NET Framework和.NET Core中如何使用SignalR?

    官网文档:https://learn.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?view=aspnetcore-6.0tabs=visual-studio SignalR开源代码:https://github.com/signalr 很多小伙伴问:在前后端分离项目中,后端是.NET Core前端是Vue如何使用SignalR?在前后端不分离项目中,.NET Framework MVC项目中又如何使用SignalR技术呢?

    2024年02月12日
    浏览(52)
  • 【C#】.Net Framework框架下使用SQLike以及基本概念

    2023年,第32周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 在C#的.NET Framework框架下,有很多轻量级数据库选择,比如:SQLike就是其中一款,一起来了解SQLike的简单使用吧。 轻量级数据库是指具有较小的存储需求、资源消耗较低、易于部署和使用的数据

    2024年02月11日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包