Web重温系列(二):SQLite+EF6实现本地化存储
本来我们的产品有着复杂的层次结构,作为客户端的C# WinForm是不操作数据库的。但是最近有个需求,需要将数据本地保存。可选的方案很多,比如文本文件或者XML序列化和反序列化,或者如access、dbf等传统文件数据库。但是为了赶时髦,我们决定使用SQLite(其实也不时髦了:))。而且我们既然不习惯于操作数据库,我们就不想使用基本的ADO.Net写SQL语句来操作数据,于是ORM就是最好的选择了。EF是微软的实现,对于首次尝试ORM的我们,当然是第一选择。
领导和同事给了很多指导和帮助,在此表示感谢。
操作流程如下:
1. 安装SQLite客户端
客户端种类繁多,笛子安装的是DB Browser for SQLite(http://sqlitebrowser.org/);
2. 创建数据库(文件)和数据表
a. 利用客户端创建数据库文件(扩展名为.sqlite),一个数据库文件相当于一个database(单数据库);
b. 执行创建数据库表Student的脚本(相当于表级别);
3. 在VS中利用NuGet包管理器安装System.Data.SQLite
会自动引用控件和修改App.config配置文件;
4. 创建于表结构完全一样的类
也可以不一样,然后通过Annotation标签,Table、Key、Column等映射到SQLite表中
(也可以通过创建“ADO.Net数据模型实体”来自动生成,如果采取这种方式,5也不需要了)
- [Table("Student")]
- public class Student
- {
- [Key]
- [Column("id")]
- public int Id {get;set;}
- [Column("name")]
- public string Name {get;set;}
- [Column("age")]
- public decimal Age {get;set;}
- }
5. 创建自己的DbContext类
需要继承自DbContext类(相当于database),和DbSet属性 (相当于表的行集)
- public class StudentDbContext : DbContext
- {
- public StudentDbContext()
- : base("name=connectionName")
- {
- }
- protected override void OnModelCreating(DbModelBuilder modelBuilder)
- {
- throw new UnintentionalCodeFirstException();
- }
- public virtual DbSet<Student> Students { get; set; }
- }
6. 表的增删查改
- StudentDbContext db = new StudentDbContext ();
- var student = new Student()
- {
- Id = ,
- Name = "Luke",
- Age = ,
- };
功能 |
代码演示 |
增 |
db.Students.Add(student); db.SaveChanges(); |
删 |
db.Students.Remove(student); db.SaveChanges(); |
查 |
db.Students.Load(); |
改 |
var row = db.Students.Find(1); row.Name = "改了改了"; db.SaveChanges(); |
此外,学习EntityFramework,Entity Framework Tutorial这个 英文网站不错。
Web重温系列(二):SQLite+EF6实现本地化存储的更多相关文章
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- Web API系列(二)接口安全和参数校验
以前简单介绍过web api 的设计,但是还是有很多朋友问我,如何合理的设计和实现web api.比如,接口安全,异常处理,统一数据返回等问题.所以有必要系统的总结总结 web api 的设计和实现. ...
- Web重温系列(一):利用寄宿于IIS的WCF序列化文件
这两年一直在做WinForm,对于Web已经比较生疏了,其实之前做的也不是很多. 这两天做了一个小工具,功能很简单,就是想有个地方存放办公室同事的机器名和IP的信息,包括附加的用户名和更新时间.比较之 ...
- Web重温系列(三):OracleDependency实现监听数据库变化
有个小项目(后来由另一个小组以Java开发了),内容是监控一个Oracle数据库.如果其中一个表A有数据变动,则需要将相关内容重组后通过接口发送给B. 通常的解决办法是定时查询,时间间隔可以小一点,还 ...
- Web API系列(三)统一异常处理
前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...
- Spring Boot进阶系列二
上一篇文章,主要分析了怎么建立一个Restful web service,系列二主要创建一个H5静态页面使用ajax请求数据,功能主要有添加一本书,请求所有书并且按照Id降序排列,以及查看,删除一本书 ...
- Web 开发人员和设计师必读文章推荐【系列二十九】
<Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 前端开发人员和设计师必读文章推荐【系列二十八】
<Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
- Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】
<Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...
随机推荐
- IDEA+Maven:cannot download sources
把IDEA的maven换成maven2
- ReactNative bug:Application XXX has not bean registered.
故障现象 当react-native init新项目之后运行react-native run -android/ios时手机报错 Application XXX has not bean regist ...
- IIS中找不到dll文件的依赖项问题
1. 文件是否被锁定了2. 文件是否具有了everyone用户的读写权限.3. 文件是不是编译为了AnyCPU模式.4. 文件依赖的文件是否在bin目录下存在5. 停止IIS,把.net Framew ...
- Mac下hadoop运行word count的坑
Mac下hadoop运行word count的坑 Word count体现了Map Reduce的经典思想,是分布式计算中中的hello world.然而博主很幸运地遇到了Mac下特有的问题Mkdir ...
- 基于Tkinter以及百度翻译爬虫做的一个小的翻译软件
首先看效果: 输入Hello, 可见输出 int. 打招呼 下面看源码: from tkinter import * import requests# 首先导入用到的库 request = reque ...
- django之简单验证码实现与form表单钩子函数补充
本篇主要讲解简单的验证码实现,验证码使用基本都是找现成的组件来实现,用代码实现这个简单功能主要是了解了解验证码内部的实现. 本篇导航: 五位验证码图示 代码实现 登录验证 Form组件钩子函数补充 一 ...
- flask之基于DBUtils实现数据库连接池、本地线程、上下文
本篇导航: 数据库连接池 本地线程 上下文管理 面向对象部分知识点解析 1.子类继承父类__init__的三种方式 class Dog(Animal): #子类 派生类 def __init__(se ...
- linux 下令chmod 755的意思
linux 命令chmod 755的意思 chmod是Linux下设置文件权限的命令,后面的数字表示不同用户或用户组的权限. 一般是三个数字:第一个数字表示文件所有者的权限第二个数字表示与文件所有者同 ...
- HBuilder的扩展插件开发暴露了一个事实:其实不能实现写一次代码实现跨平台App生成
HBuilder的扩展插件开发,原来并不能生成单独的插件jar,而是以源码 - 类的形式进行开发,这其实就要求必须使用离线打包. 事实上,开发顺序应该是:先弄好离线打包框架,然后在AS里进行扩展插件开 ...
- .net core使用配置文件
.net core使用配置文件 在 .net core中,配置文件的读取是通过IConfiguration来提供的,程序集是Microsoft.Extensions.Configuration,对应的 ...