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) { ...
 
随机推荐
- 【小贴士】探一探javascript中的replace
			
javascript字符串与数组有很多精巧的方法,比如splice.indexOf,而replace在字符串处理中偶尔会产生让人愉悦的效果 比如underscore中的模板引擎替换部分,又如信用卡分割 ...
 - AE创建一个空白的Shapefile
			
1.IField和IFieldEdit区别: IFieldEdit是继承IField的,因为IField的属性大部分是只读的(read-only),所以IFieldEdit就在IField的基础上多了 ...
 - sharepoint 相关<httpHandlers>
			
<add verb="GET,POST,HEAD,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*.doc,*.docx ...
 - 了解HTML 盒模型
			
HTML在布局上, 有一个非常重要的模型, 那就是盒子模型, 在盒子模型中把标签内容理解为一个物品, 而css样式理解为包容着这个物品的盒子, 一般的块级标签都具有盒子模型的特征, 你可以在css中对 ...
 - iOS开发new与alloc/init的区别
			
[className new]基本等同于[[className alloc] init]: 区别只在于alloc分配内存的时候使用了zone. 这个zone是个什么东东呢? 它是给对象分配内存的时候, ...
 - MPMoviePlayerController属性,方法,通知整理
			
属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatom ...
 - SSIS 2010 BUG 一例
			
Sample data :abc|"edfg|xyz Test 1: Text Qualified is set to nothing. the result is in good for ...
 - 深入解析Windows操作系统笔记——CH2系统结构
			
2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...
 - 【转】Flex 布局语法教程
			
网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...
 - ORACLE 字符串超长问题解决方案
			
前两天我在工作中遇到这样一个问题,我们有一个程序是用来增量抽取EBS 中的表数据的,有的是全量抽取,即先删除原表中的数据,然后重新抽取数据,示例代码如下: truncate table ods_emp ...