SQLite简易版ORM

首先打开项目,使用nuget搜索sqlite-net,如下图:

下载完成后,我们会多出两个文件,SQLite.cs和SQLiteAsync.cs。

我们新建一个文件夹SQLiteResources,把这俩文件放进去。

然后我们创建两个表实体,如下:

public class Valuation
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
[Indexed("ValuationStockId2",1)] //索引,注意,该索引在表创建时,会创建,如果索引改名,旧索引依然存在,并未被删除
public int StockId { get; set; }
public DateTime Time { get; set; }
public decimal Price { get; set; }
}
public class Stock
{
  [PrimaryKey, AutoIncrement]
  public int Id { get; set; }
  public string Symbol { get; set; }
}

接下来我们创建一个SQLiteHelper,用来管理Sqlite数据库,如下:

public class SQLiteHelper
{
public string connstr = Path.Combine(Environment.CurrentDirectory, "User.db");//没有数据库会创建数据库
public SQLiteConnection db;
public SQLiteHelper()
{
db = new SQLiteConnection(connstr);
db.CreateTable<Stock>();//表已存在不会重复创建
db.CreateTable<Valuation>();
} public int Add<T>(T model)
{
return db.Insert(model);
} public int Update<T>(T model)
{
return db.Update(model);
} public int Delete<T>(T model)
{
return db.Update(model);
}
public List<T> Query<T>(string sql) where T : new()
{
return db.Query<T>(sql);
}
public int Execute(string sql)
{
return db.Execute(sql);
}
}

到此,我们的简易版ORM就搭建好了,下面让我们一起试用下这个ORM。

首先我们添加一个项目,SqliteTestConsole。

然后在Main函数中写上测试代码如下:

static void Main(string[] args)
{
SQLiteHelper sqliteHelper = new SQLiteHelper();
var list = sqliteHelper.Query<Stock>("select * from Stock");
sqliteHelper.Add(new Valuation() { Price = 100, StockId = 1, Time = DateTime.Now });
var list2 = sqliteHelper.Query<Valuation>("select * from Valuation");
var list3 = sqliteHelper.Query<Valuation>("select * from Valuation INDEXED BY ValuationStockId2 WHERE StockId > 2");//使用索引ValuationStockId2查询
try
{
sqliteHelper.Execute("drop index ValuationStockId");//删除索引,因为该索引已被删除,所以抛异常
}
catch (Exception ex)
{ }
}

然后运行调试,会抛出异常如下:

那么我们到底缺少什么依赖文件呢?

打开SQLite.cs文件,我们会发现如下代码:

如上图所示,我们缺少了依赖dll—sqlite3.dll。

下面我们打开sqlite的官网寻找并下载依赖动态库【Sqlite官网下载网址

因为项目使用x86的Framework4.6.1,所以我们要找到对应的sqlite版本。

下载完成后,我们可看到如下文件。

我们把其中的sqlite3.dll移动到项目的输出目录【X盘\SqliteTestConsole\bin\Debug】下面。

然后我们运行项目,项目依然提示错误。

这是因为我们的下载的sqllite3.dll是x86的版本,所以我们要把Any CPU修改为x86,选择【配置管理器】,如下图:

然后我们再运行测试项目就可以正常编译通过了。

现在,我们再使用sqlitebrowser打开我们创建的User.db查看数据。

sqlitebrowser是一个sqlite的开源管理工具,下载地址:https://github.com/sqlitebrowser/sqlitebrowser

如图所示,我们已经成功创建了表,并完成了插入数据操作。

----------------------------------------------------------------------------------------------------

到此SQLite的简易ORM就已经搭建完成了。

代码已经传到Github上了,欢迎大家下载。

Github地址:https://github.com/kiba518/SQLite_net.Helper

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!

C#使用sqlite-net搭建简易的ORM的更多相关文章

  1. 使用ruby搭建简易的http服务和sass环境

    使用ruby搭建简易的http服务和sass环境 由于在通常的前端开发情况下,我们会有可能需要一个http服务,当然你可以选择自己写一个node的http服务,也比较简单,比如下面的node代码: v ...

  2. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  3. EditPlus+MinGW搭建简易的C/C++开发环境

    EditPlus+MinGW搭建简易的C/C++开发环境 有时候想用C编点小程序,但是每次都要启动那难用又难看的VC实在是不情愿,而且老是会生成很多没用的中间文件,很讨厌,后来看到网上有很多人用Edi ...

  4. Python中使用Flask、MongoDB搭建简易图片服务器

    主要介绍了Python中使用Flask.MongoDB搭建简易图片服务器,本文是一个详细完整的教程,需要的朋友可以参考下 1.前期准备 通过 pip 或 easy_install 安装了 pymong ...

  5. express搭建简易web的服务器

    express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. ...

  6. go服务端----使用dotweb框架搭建简易服务

    使用dotweb框架搭建简易服务 go语言web框架挺多的,所谓琳琅满目,里面也有很多优秀的,比如echo.beego等,但体验下来,总是觉得哪里有点小疙瘩,后来才明白过来,echo太简单,很多日常使 ...

  7. 搭建简易的c语言与python语言CGI和Apache服务器的开发环境

    搭建简易的c语言CGI和Apache服务器的开发环境 http://www.cnblogs.com/tt-0411/archive/2011/11/21/2257203.html python配置ap ...

  8. python搭建简易服务器实例参考

    有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 w ...

  9. 搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3

    Web GIS系列: 搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3 使用GeoServer+QGIS发布WMTS服务 使用GeoSe ...

随机推荐

  1. win10 uwp 萤火虫效果

    原文:win10 uwp 萤火虫效果 本文在Nukepayload2指导下,使用他的思想用C#写出来. 本文告诉大家,如何使用 win2d 做出萤火虫效果. 安装 win2d 安装win2d的方法请使 ...

  2. 写给非专业人士看的 *** 简介(同时也解释了GFW )

    写给非专业人士看的 *** 简介 这个文章来源于一个朋友在***的过程中,搞不清楚 *** 的配置问题,在这里我想按照我对 *** 的理解简单梳理一下,以便一些非专业人士也能了解 long long ...

  3. Java Web系列:Spring Boot 基础 Spring Security基本使用

    @OneToOne or @ManyToOne Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com ...

  4. UWP开发-自适应布局

    了解css的人知道,对于不同的屏幕尺寸,css使用一种名为媒体查询的东东来适用不同的屏幕尺寸,以提升用户体验.当用户使用PC等大屏幕的设备时,网页将呈现一种布局形式:而当用户使用手机等小屏幕设备时,布 ...

  5. Delphi-网络编程-第一个网络方面作品(UDP聊天程序)

    其实这不算是一个聊天程序,因为还不能实现双方互发信息,只有一方能发信息,呵呵 我以后再改进吧.... 服务端代码: unit Unit1;   interface   uses   Windows, ...

  6. Delphi For Linux Compiler

    Embarcadero is about to release a new Delphi compiler for the Linux platform. Here are some of the k ...

  7. Qt DLL总结【二】-创建及调用QT的 DLL(三篇)good

    目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...

  8. 去除文件属性(使用SetFileAttributes API函数)

    FILE_ATTRIBUTE_ARCHIVE 文件存档(备份或移动时会对文件做标记).FILE_ATTRIBUTE_ENCRYPTED 加密(对文件来说是内容加密,对目录来说是对将来新建的文件默认为加 ...

  9. Delphi中,indy控件实现收发邮件的几点学习记录( 可以考虑加入多线程,用多个邮箱做一个邮箱群发器) 转

    关于用Delphi中的Indy控件实现收发邮件的几点学习记录             这几天心里颇不宁静,不是因为项目延期,而是因为自己几个月前做的邮件发送程序至今无任何进展,虽然一向谦虚的人在网上发 ...

  10. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作

    /****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT ...