本文最后更新于 661 天前,其中的信息可能已经有所发展或是发生改变。
在使用C#构建项目DuyaGeneralIOTBackend——渡鸦通用物联网服服务器的时候,为了内存性能,选择了实时io终端状态的形式,终端状态更新即io,但随之也带来了巨大的问题,传统使用JSON来序列化与实例化的操作可能会在多终端的多线程下带来极大的线程安全,而分文件又会带来查询困难等问题,决定使用数据库来存储终端状态
经查阅MSDN的文档,.NET可以通过ntity Framework Core软件包将C# LINQ语句转换为SQL语句来操控多种数据库,官方最支持的是轻量化和高性能的SQLite数据库,于是便决定使用SQLite来构建项目
经查阅文档,流程如下:
首先,创建一个数据上下文类,继承自Microsoft.EntityFrameworkCore.DbContext,实现一个db上下文接口,储存到本地
class Database : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=,myDB.db;");
}
}
Entity Framework Core可以将CS的类转换为SQL的表,创建储存数据的类:
public class IOTdevices
{
public int Id { get; set; }
public Guid? Guid { get; set; }
public string? IP { get; set; }
public string? Type { get; set; }
}
该实体类映射到数据库中的表:
class Database : DbContext
{
public DbSet<IOTdevices> IOTdevices { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=,myDB.db;");
}
}
之后初始化数据库,运行SQLite,实例化Entity Framework Core,怎加条目
SQLitePCL.Batteries.Init();
using var db = new Database();
db.Database.EnsureCreated();
db.IOTdevices.Add(new IOTdevices { Guid = Guid.NewGuid(), IP = "114.514.191.9" });
db.SaveChanges();
经测试成功,其他复杂的搜索,删减等操作可以查阅MSDN,不再赘述
还不知道shanwer这么~
这不是我,是我社团的社长(