EF6 在 SQLite中使用备忘
== 菜鸟级选手试验在EF6中使用Sqlite,零EF基础,少量Sqlite基础。经过断断续续的很长时间 - _ -!
>>连接
1. 安装
使用目前最新版本EF6.1,Sqlite1.0.93.0。直接NuGet安装:

2. 配置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <connectionStrings> <add name="SqlliteEF6" connectionString="Data Source=Data\EF6.db" providerName="System.Data.SQLite" /> </connectionStrings> <entityFramework> <providers> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite" /> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> <remove invariant="System.Data.SQLite.EF6" /> <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".Net Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> </DbProviderFactories> </system.data></configuration> |
3. 设置数据库
EF中数据库操作继承DBContext。需要指定数据连接,名称和config配置一致,否则默认使用Sqlserver。
SQLite可以重载创建。
|
1
2
3
4
5
6
7
8
9
10
11
|
public class EF6Context : DbContext { public EF6Context(string databaseName = "SqlliteEF6") : base(databaseName) { } public DbSet<User> Users { set; get; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {} } |
>>注意事项
1. Sqlite中不能自动创建数据库和新建表,需要额外的操作
>> 数据类型插入获取
1. 自增ID
Sqlite中需要设置AUTOINCREMENT,如下:
|
1
|
Id INTEGER PRIMARY KEY AUTOINCREMENT, |
需要引用System.ComponentModel.DataAnnotations,System.ComponentModel.DataAnnotations.Schema,类中写明
|
1
2
|
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]public Int64 Id { get; set; } |
2. 限定Table
默认数据库获取为DBContext中定义的名称,限定对应的Table,需要在类上指明,如下:
|
1
2
3
|
[Table("User")]public class User{... |
3. 枚举型
目前直接能使用,注意需要在定义表时限定不能为NULL,否则为NULL时获取会报错。定义时如下定义:
|
1
|
public enum TestENUM : long { A, B, C }; |
4. 其它
目前SQlite中支持浮点数、时间、二进制数据、字符串等。创建表示例:
|
1
2
3
4
5
6
7
8
9
|
NorthwindContext context = new NorthwindContext(); string sql = @" CREATE TABLE User ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Name varchar (20), Time timestamp, Data blob, Val REAL, TestE INTEGER);"; context.Database.ExecuteSqlCommand(sql, new object[1]); |
定义类示例:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[Table("User")]public class User{ public enum TestENUM : long { A, B, C }; [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Int64 Id { get; set; } [StringLength(30)] public string Name { get; set; } public byte[] Data { get; set; } public double Val { get; set; } public DateTime Time { get; set; } public TestENUM TestE { get; set; } } |
|
1
2
3
4
5
6
7
8
9
10
11
|
public class EF6Context : DbContext { public EF6Context(string databaseName = "SqlliteEF6") : base(databaseName) { } public DbSet<User> Users { set; get; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {} } |
调用示例:
|
1
2
3
|
NorthwindContext context = new NorthwindContext();context.Users.Add(new User() { Data = new byte[] { 1, 2, 3, 4 }, Name = "aa22", Time = DateTime.Now, Val = 2.2, TestE = User.TestENUM.B });context.SaveChanges(); |
|
1
2
3
|
NorthwindContext context = new NorthwindContext();context.Users.OrderBy(c => c.Name).Load();this.dataGrid.ItemsSource = context.Users.Local; |
以上代码测试正常。源码下载
EF6 在 SQLite中使用备忘的更多相关文章
- JQuery中常用方法备忘
本文转载自博客园,原文地址 http://www.cnblogs.com/xzf158/archive/2008/10/14/logan.html 1.Window.onload 的JQuery方法 ...
- 跑caffe过程中的备忘
1*1卷积比如一张500*500且厚度depth为100的图片在20个filter上做1*1卷积,那么结果大小为500*500*20 只有池化改变图片的大小 一个大的全连接层可以理解为一个神经网络,这 ...
- ECMAScript 5(ES5)中bind方法简介备忘
一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- Python中利用函数装饰器实现备忘功能
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下 " ...
- selenium中使用chromedriver备忘
chromedriver是chrome浏览器的webdriver的一个实现.ChromeDriver是由Chrome开发团队来完成的因而ChromeDriver不包含在selenium包中,需要从Ch ...
- 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘
[C#]无损转换Image为Icon 如题,市面上常见的方法是: var handle = bmp.GetHicon(); //得到图标句柄 return Icon.FromHandle(handle ...
- (备忘)Java web项目迁移到Centos7中验证码无法显示
每天多学一点知识. 今天部署项目的时候出现验证码无法显示的问题,如下图所示:
- stm32f103中freertos的tasks基本使用案例及备忘
基本实例 freetos的在stm32中使用踩了一些坑,事情做完了,就 做个备忘,希望能给后面的人一些借鉴. 先给出一个实际的例子吧. 启动代码 void task_create(void) { ...
随机推荐
- mvc view 中 js 不反应
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 对CVE-2014-6271 [破壳漏洞] 的一次不太深入的跟踪
@firtst:有些事,该你遇到的始终会遇到!2013年,Struts2远程代码执行漏洞闹的满城风雨时,当时还对此一无所知:2014年4月,HeartBleed掀起波涛汹涌时,较快对此予以关注,晚上跑 ...
- 生成的API分析文件太大。我们无法在交付前验证您的API使用信息。这只是通知信息。
这次使用了APICloud平台来开发移动APP, 发布的时候在api控制台云编译成ipa后,这次使用apple提供的Application Loader工具提交apa文件到iTunes上去,提交结束的 ...
- Android 刷新相册
Android4.4之前: sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse("file://" + f ...
- 【原+转】创建CocoaPods私有podspec
在我的上一篇文章<iOS 手把手教你发布代码到CocoaPods>中着重介绍如何将自己的代码索引添加到公开的CocoaPods中,当你需要主动地向大众开源你的代码时需要那么做.但在现实中我 ...
- CSS3-01 简介
概述 HTML 文档由包含 HTML 标签的 HTML 元素组成,HTML 标签被用于定义文档的内容.HTML 文档内容没有额外的样式,以纯文本流的方式渲染到浏览器页面.需要借助层叠样式表(CSS)来 ...
- [转]iOS开发中的火星坐标系及各种坐标系转换算法
iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183 其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...
- Spring 4 集成Apache CXF开发JAX-RS Web Service
什么是JAX-RS 在JSR-311规范中定义,即Java API for RESTful Web Services,一套Java API,用于开发 RESTful风格的Webservice. 工程概 ...
- sshfs 实现普通用户可读写
先实现普通用户免密码host1可登入host2host1# yum install fuse sshfs; 如果装不上,需要安装epep源 --enablerepo=epelhost1# su - e ...
- 致命错误: zlib.h:没有那个文件或目录
下面这个错误是因为zlib包没有安装,安装后问题即可解决.但有一点请注意安装命令是:sudo apt-get install zlib1g-dev,而非sudo apt-get install zli ...