== 菜鸟级选手试验在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 { setget; }
 
        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 { setget; }
 
        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中使用备忘的更多相关文章

  1. JQuery中常用方法备忘

    本文转载自博客园,原文地址 http://www.cnblogs.com/xzf158/archive/2008/10/14/logan.html 1.Window.onload 的JQuery方法 ...

  2. 跑caffe过程中的备忘

    1*1卷积比如一张500*500且厚度depth为100的图片在20个filter上做1*1卷积,那么结果大小为500*500*20 只有池化改变图片的大小 一个大的全连接层可以理解为一个神经网络,这 ...

  3. ECMAScript 5(ES5)中bind方法简介备忘

    一直以来对和this有关的东西模糊不清,譬如call.apply等等.这次看到一个和bind有关的笔试题,故记此文以备忘. bind和call以及apply一样,都是可以改变上下文的this指向的.不 ...

  4. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  5. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  6. selenium中使用chromedriver备忘

    chromedriver是chrome浏览器的webdriver的一个实现.ChromeDriver是由Chrome开发团队来完成的因而ChromeDriver不包含在selenium包中,需要从Ch ...

  7. 【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 ...

  8. (备忘)Java web项目迁移到Centos7中验证码无法显示

    每天多学一点知识. 今天部署项目的时候出现验证码无法显示的问题,如下图所示:

  9. stm32f103中freertos的tasks基本使用案例及备忘

    基本实例   freetos的在stm32中使用踩了一些坑,事情做完了,就 做个备忘,希望能给后面的人一些借鉴. 先给出一个实际的例子吧. 启动代码 void task_create(void) { ...

随机推荐

  1. 【小贴士】探一探javascript中的replace

    javascript字符串与数组有很多精巧的方法,比如splice.indexOf,而replace在字符串处理中偶尔会产生让人愉悦的效果 比如underscore中的模板引擎替换部分,又如信用卡分割 ...

  2. AE创建一个空白的Shapefile

    1.IField和IFieldEdit区别: IFieldEdit是继承IField的,因为IField的属性大部分是只读的(read-only),所以IFieldEdit就在IField的基础上多了 ...

  3. sharepoint 相关<httpHandlers>

    <add verb="GET,POST,HEAD,(GETSOURCE),(HEADSOURCE),(POSTSOURCE)" path="*.doc,*.docx ...

  4. 了解HTML 盒模型

    HTML在布局上, 有一个非常重要的模型, 那就是盒子模型, 在盒子模型中把标签内容理解为一个物品, 而css样式理解为包容着这个物品的盒子, 一般的块级标签都具有盒子模型的特征, 你可以在css中对 ...

  5. iOS开发new与alloc/init的区别

    [className new]基本等同于[[className alloc] init]: 区别只在于alloc分配内存的时候使用了zone. 这个zone是个什么东东呢? 它是给对象分配内存的时候, ...

  6. MPMoviePlayerController属性,方法,通知整理

    属性 说明 @property (nonatomic, copy) NSURL *contentURL 播放媒体URL,这个URL可以是本地路径,也可以是网络路径 @property (nonatom ...

  7. SSIS 2010 BUG 一例

    Sample data :abc|"edfg|xyz Test 1: Text Qualified is  set to nothing. the result is in good for ...

  8. 深入解析Windows操作系统笔记——CH2系统结构

    2.系统结构 本章主要介绍系统的总体结构,关键部件之间的交互,以及运行在什么环境. 2.系统结构 2.1 需求和设计目标 2.2 操作系统模型 2.3 总体结构 2.3.1 可移植性 2.3.2 对称 ...

  9. 【转】Flex 布局语法教程

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...

  10. ORACLE 字符串超长问题解决方案

    前两天我在工作中遇到这样一个问题,我们有一个程序是用来增量抽取EBS 中的表数据的,有的是全量抽取,即先删除原表中的数据,然后重新抽取数据,示例代码如下: truncate table ods_emp ...