dotNet 之数据库sqlite

Sqlite3是个特别好的本地数据库,体积小,无需安装,是写小控制台程序最佳数据库。NET Core是同样也是.NET 未来的方向。

**硬件支持型号  点击 查看 硬件支持 详情**

DTU701 产品详情

DTU702 产品详情

DTU801 产品详情

DTU802 产品详情

DTU902 产品详情

G5501 产品详情

ARM dotnet 编程

 

创建C#控制台应用(具有.NET6),项目命令sqlite。

Nuget安装

  • Microsoft.EntityFrameworkCore.Sqlite

  • Microsoft.EntityFrameworkCore.Sqlite.Core

  • Newtonsoft.Json

EF:ORM操作框架,但不包括数据库基本操作(我感觉默认自带sql server数据库操作) Sqlite:Sqlite数据库操作,EF接管

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

sqlite上 添加->新建文件夹DB

DB 添加->类 ORMContext

ORMContext是数据库的上下文。

ORMContext.cc 中的内容如下:

namespace sqlite.DB
{
    //继承DbContext,让EF接管  ,ORMContext数据库上下文
    public class ORMContext : DbContext
    {
        public DbSet<Student> Students { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //base.OnConfiguring(optionsBuilder);
            //数据库连接字符串
            optionsBuilder.UseSqlite("Data Source=blogging.db");
        }

    }

    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; }

    }
}

Program.cs中 我们 对数据库 进行创建、保存、查、排序、增、删、改等操作,程序如下:

ORMContext _ORMContext = new ORMContext();
//如果没有数据库,则自动创建
_ORMContext.Database.EnsureCreated();
var i = 0;
for (i = 0; i < 10; i++)
{
    _ORMContext.Students.Add(new Student()
    {
        Name = "小李" + i,
        Age = i,
        Sex = "女"
    });
}
//保存数据库更新
_ORMContext.SaveChanges();
​
//系列化打印数据
//var res = _ORMContext.Students.Where(t => t.Sex == "女").ToList();
//Console.WriteLine(JsonConvert.SerializeObject(res));
​
Console.WriteLine("所有:");
var res = _ORMContext.Students.Where(t => true).ToList();
res.ForEach(t => {
    Console.WriteLine("Name:"+t.Name+" Age:"+t.Age+" Sex:"+t.Sex);
​
});
Console.WriteLine();
​
/*查*/
​
Console.WriteLine("查List:");
//var ListRes = _ORMContext.数据表.Where(t => 判断条件).ToList();
var ListRes = _ORMContext.Students.Where(t => t.Name == "小李1").ToList();
Console.WriteLine(JsonConvert.SerializeObject(ListRes));
​
Console.WriteLine("查第一个,如果没有则返回null:");
var res1 = _ORMContext.Students.Where(t => t.Name == "小李1").FirstOrDefault();
Console.WriteLine(JsonConvert.SerializeObject(res1));
//排序
//OrderBy: 升序
//OrderByDescending:降序
Console.WriteLine("排序:");
var res2 = _ORMContext.Students.Where(t=>t.Name == "小李1").OrderByDescending(t => t.Id).ToList();
Console.WriteLine(JsonConvert.SerializeObject(res2));
​
/*增,删,改
 
由于ORM是对象数据模型,所以所有的数据操作都是对一个完整的对象进行操作。
EF具有缓存追踪的设置,如果你查询出来的数据进行了修改,然后保存缓存的话,就会同步更新。
​
 */
// 增
_ORMContext.Students.Add(new Student
{
    Name = "小李",
    Age = i,
    Sex = "男"
});
_ORMContext.SaveChanges();//保存缓存操作
​
// 改
var res3 = _ORMContext.Students.Where(t => t.Age == 0).ToList();
//将所有年龄为0的人的名字改成"修改名称"
res3.ForEach(item => {
    item.Name = "修改名称";
});
​
_ORMContext.SaveChanges();//保存缓存操作
​
// 删
//删除所有年龄小于5岁的人
Console.WriteLine("删除所有年龄小于5岁的人");
var res4 = _ORMContext.Students.Where(t => true).ToList();
​
res4.ForEach(t => {
    if (t.Age < 5)
    {
        _ORMContext.Students.Remove(t);
    }
});
​
_ORMContext.SaveChanges();//保存缓存操作
​
​
Console.WriteLine("剩余的名字:");
var res5 = _ORMContext.Students.Where(t => true).ToList();
res5.ForEach(t => {
    Console.WriteLine(t.Name);
    
});
​
//sql语句执行
//sql查询
//实体查询
//var res5 = _ORMContext.Database.SqlQuery<Student>("Select * from Students").ToList();
​
///sql执行/增删改
//_ORMContext.Database.ExecuteSqlCommand("update Students set sex = '女' where age = 6");
​
Console.WriteLine("Hello, World!");
Console.ReadLine();

执行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值