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 { 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;

以上代码测试正常。源码下载

来自为知笔记(Wiz)

EF6 在 SQLite中使用备忘

时间: 2024-07-29 19:20:20

EF6 在 SQLite中使用备忘的相关文章

SSH框架整合中的备忘记录

整合ssh需要的jar包: struts2-core.jar struts2-convention-plugin-2.*.*.*.jar ------是struts2的注解开发jar包 struts2-spring-plugin-2.*.*.*.jar ------struts2用于整合spring的jar包 (spring中也有一个 spring-struts2的jar包,也是用来整合两个框架的jar包,引入其中一个可以) Hibernate框架开发的响应的jar: hibernate-cor

跑caffe过程中的备忘

1*1卷积比如一张500*500且厚度depth为100的图片在20个filter上做1*1卷积,那么结果大小为500*500*20 只有池化改变图片的大小 一个大的全连接层可以理解为一个神经网络,这个NN 中的神经元连接着前一层的每一个输入 ,所以最后一层数据被延展为一个巨大 的列向量. 卷积的过程是一个逐渐抽象化的过程,到最后得到一个数据块 在每个卷积层中,数据都是以三维的形式存在的.你可以吧它看成很多二维图片叠在一起,其中每一个称为一个feature map.在输入层,如果是灰度图片,那就

备忘3:数据绑定中值的判断

昨天,在一个项目中,要用到Repeater循环获取值,然后根据某个字段的值进行判断,以决定是否需要添加某个样式.之前用的<%#Eval("Name").ToString()==name?"是":"否”%>,其中name为.cs页面一个公共string类型的变量,Name为数据库里表的一个nvarchar(50)类型的字段.通过调试发现数据源中的数据其实是和name的值相等的,但是判断的值一直是"否".后来,百度找到的方案是改

c# -- 读取文件夹中的所有文件(备忘)

读取选取的文件夾下的所有.txt文件 private void button1_Click(object sender, EventArgs e){ if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string foldPath = folderBrowserDialog1.SelectedPath; MessageBox.Show("已选择文件夹:" + foldPath, "选择文件夹提示"

备忘之类中的static成员的访问方式

原文地址:http://leihuang.net/2014/05/19/List-Interviews/ 单链表的一些常见面试题汇总 单链表反转/逆序 求单链表倒数第N个数 找到单链表的中间结点 如何判断链表是否有环的存在 单链表建环,无环链表变有环 如何知道环的长度? 如何找出环的连接点在哪里? 删除单链表中的重复元素 下面我先简单叙述一下每道题的思路,然后把实现的程序一起贴出来,不会讲得太细,我觉得只要有了思路之后,接下来的难点就是语言上的一些细节问题了,这个不自己去实现,听别人讲是体会不到

UML中关系的分类及其概念——总结备忘

UML中关系分类: 依赖:依赖是两个事物间的语义关系,其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物)的语义. 关联:关联是类与类之间的联接,它使一个类知道另一类的属性和方法. 聚合:聚合是一种特殊类型的关联,它描述了整体和部分的结构关系. 组合:组合是关联的一种,是比集合关系强的关系. 泛化:泛化(继承)是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素). UML中关系符号及对应的Java代表的含义 依赖关系         关联关系      聚合关系    

(练手备忘)汇编实现将输入的字符串中的空格去掉后反序输出

功能:任意输入一个字符串,去掉其中的空格后反序输出 注:使用 int 21h 里的 0AH 功能 输入一个字符串时,字符串的第一个字节存储的是字符串的最大长度,第二个字节存储的是实际读入字符的个数 编译器使用的是MASMPlus ;#Mode = DOS MAXLEN = 64 ;设置字符串的最大长度 SPACE = ' ' ;空格 datasg segment buffer db MAXLEN+1,0,MAXLEN+1 dup(0) ;字符串输入缓冲区 string db MAXLEN+3 d

shell中${##%%}代表啥,备忘

#!/bin/bash A=aigo.goto.aigo.goto echo ${A#*go} echo ${A##*go} echo ${A%.*} echo ${A%%go*} 执行结果 .goto.aigo.goto to aigo.goto.aigo ai 备忘如下: #*字串 --从左向右将变量A中最先出现的"字串"(最靠左)以及其左边的一切都去掉(因为有个*) ##*字串 --从左向右将变量A中最后出现的"字串"(最靠右)以及其左边的一切都去掉 %字串*

从3dmax中导入模型到UDK Editor(供个人备忘)

笔记从3dmax中导入模型到UDK Editor 1)      在3dmax中导出 2)      选择FBX格式,保存 3)      在UDK中打开content browser,自己选个package ,点击Import 4)      选择一个package后,点击确认 5)      导入成功,在content browser中新增了一项 从3dmax中导入模型到UDK Editor(供个人备忘),布布扣,bubuko.com