本来我们的产品有着复杂的层次结构,作为客户端的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实现本地化存储的更多相关文章

  1. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  2. Web API系列(二)接口安全和参数校验

    以前简单介绍过web api 的设计,但是还是有很多朋友问我,如何合理的设计和实现web api.比如,接口安全,异常处理,统一数据返回等问题.所以有必要系统的总结总结 web api 的设计和实现. ...

  3. Web重温系列(一):利用寄宿于IIS的WCF序列化文件

    这两年一直在做WinForm,对于Web已经比较生疏了,其实之前做的也不是很多. 这两天做了一个小工具,功能很简单,就是想有个地方存放办公室同事的机器名和IP的信息,包括附加的用户名和更新时间.比较之 ...

  4. Web重温系列(三):OracleDependency实现监听数据库变化

    有个小项目(后来由另一个小组以Java开发了),内容是监控一个Oracle数据库.如果其中一个表A有数据变动,则需要将相关内容重组后通过接口发送给B. 通常的解决办法是定时查询,时间间隔可以小一点,还 ...

  5. Web API系列(三)统一异常处理

    前面讲了webapi的安全验证和参数安全,不清楚的朋友,可以看看前面的文章,<Web API系列(二)接口安全和参数校验>,本文主要介绍Web API异常结果的处理.作为内部或者是对外提供 ...

  6. Spring Boot进阶系列二

    上一篇文章,主要分析了怎么建立一个Restful web service,系列二主要创建一个H5静态页面使用ajax请求数据,功能主要有添加一本书,请求所有书并且按照Id降序排列,以及查看,删除一本书 ...

  7. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  8. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】

    <Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

随机推荐

  1. [ZJOI2012]波浪

    Description: L = | P2 – P1 | + | P3 – P2 | + - + | PN – PN-1 | 给你一个N和M,问:随机一个1-N的排列,它的波动强度(L)不小于M的概率 ...

  2. ab测试工具

    我们可以模拟100个并发用户,对一个页面发送1000个请求 输入命令:ab -n1000 -c100 http://www.jb51.net/ 结果: ##首先是apache的版本信息 This is ...

  3. Linux下安装配置virtualenv与virtualenvwrapper

    一.Linux下安装.配置virtualenv 配置源 #指定清华源下载pip的包 [root@localhost opt]# pip3 install -i https://pypi.tuna.ts ...

  4. iOS自动布局的学习

    Autolayout: 最重要的两个概念: 约束:对控件位置和大小的限定条件 参照:对控件设置的约束是相对于哪一个视图而言的 自动布局的核心计算公式: obj1.property1 =(obj2.pr ...

  5. SourceTree安装教程和破解教程

    SourceTree破解版是一款非常实用的编程工具,这是一款专业的Git和Hg客户端,界面简洁,操作简单易上手,是开发者的必备工具,欢迎大家来绿色资源网下载体验!SourceTree是一款免费的Git ...

  6. oval-and-rectangle

    oval-and-rectangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  7. hql 语法详解

    HQL查询:Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Lanaguage)查询提供了更加丰富的和灵活的查询特性,因此 Hib ...

  8. ASP.NET WebApi 基于分布式Session方式实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...

  9. VBA 判断一个TXT编码方式,再创建一个新的文件,复制数据进去

    如题,先读取一个文本文件判断编码(Unicode  ANSI),就这两种编码然后将txt导入到excel表中,最后处理完成,再创建一个相同编码,不同文件名的txt文件,把新数据放进去 Sub test ...

  10. Mysql中DDL, DML, DCL, 和TCL是什么?

    在一些公司中提交给测试团队的SQL脚本会划分为DDL.DML等,但这些概念到底是如何定义的呢? SQL(Structure Query Language)是数据库操作的的核心语言,接下来我们通过一张图 ...