手把手教你在c#中使用SQLite codefirst (初次使用,发现错误欢迎指导)

新建SqliteDll

  1. 创建Dll文件,安装对应Nuget包System.Data.SQLite.EF6.Migrations(其他依赖项会自动下载)
    Nuget包

  2. 修改App.config文件,将Provider中的System.Data.SQLite.EF6复制一行,改为System.Data.SQLite,如图:AppConfig

  3. 创建Entity模型,主键前加上[Key]标识(需注意SqliteCodeFirst中Guid类型是作为二进制存储的,如果默认使用Guid在使用linq时将无法正确查询到。我所知道的办法是在Sqlite使用TEXT类型存储,所以这里Guid使用String类型替代)实体类

  4. 创建类SqliteDbContext继承DbContext,属性包括Entity模型,如图DBContext
    这里的使用的"Sqlite"先不要着急,等会在主项目中配置他的链接

  5. 打开工具->Nugget包管理器->程序包管理器控制台,执行Enable-Migrations(需要把默认项目改为SqliteDll,不然每次执行命令都要加上 -project指向SqliteDll,例:Enable-Migrations -project SqliteDll)

  6. 若上一步成功,会自动生成Migrations文件夹,且文件夹下存在文件Configuration.cs。打开Configuration.cs,在构造函数中添加如下代码引入SqliteMigration
    Configuration

  7. 复制下图代码在文件Configuration.cs下,如图

public class CheckAndMigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>
   : MigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration>
   where TContext : DbContext
   where TMigrationsConfiguration : DbMigrationsConfiguration<TContext>, new()
    {
        public CheckAndMigrateDatabaseToLatestVersion(bool useSuppliedContext) : base(useSuppliedContext)
        {
        }
        public override void InitializeDatabase(TContext context)
        {
            var migratorBase = ((MigratorBase)new DbMigrator(Activator.CreateInstance<TMigrationsConfiguration>()));
            if (migratorBase.GetPendingMigrations().Any())
                migratorBase.Update();
        }
}

在这里插入图片描述

  1. 回到SqliteDbContext.cs文件,添加如下代码使用该配置
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    Database.SetInitializer(new CheckAndMigrateDatabaseToLatestVersion<SqliteDbContext,Configuration>(true));
}

  1. 程序包管理器控制台命令输入Add-Migration [名称] ,名称用来做版本管理,以后会用到。第一次可以取名叫InitDatabase什么的。

以上Dll基本完成了

主体项目

  1. 同样先安装Nuget,并配置App.config复制一行改为System.Data.SQLite(不确定是否必要,但entiytyFramework是必须要装的,有兴趣可以自己试试哪些是不必要的^ ^)

  2. 在App.config中添加connectionStrings

 <connectionStrings>
    <add name="Sqlite" connectionString="Data Source=D:\Sqlite.db" providerName="System.Data.SQLite.EF6"/>
  </connectionStrings>
  1. 添加写好的DLL引用就可以使用啦

需要注意

sqlite只能新增列、修改表名、删除表,它不支持修改列名及类型、不支持删除列。因此如果需要晚上这些功能,需要在修改模型的基础上执行Add-Magration,然后删除自动生成的代码,使用sql语句完成“生成新表,导入数据,删除原表,重命名新表”的功能,例如

 public override void Up()
        {
            SqliteDbContext dbc = new SqliteDbContext();
            string script = @"PRAGMA foreign_keys = 0;
CREATE TABLE sqlitestudio_temp_table AS SELECT * FROM Animals;
DROP TABLE Animals;
CREATE TABLE Animals (
    Id   NVARCHAR (128) NOT NULL,
    Name STRING         NOT NULL,
    PRIMARY KEY (
        Id
    )
);
INSERT INTO Animals (
                        Id
                    )
SELECT Id
FROM sqlitestudio_temp_table;
DROP TABLE sqlitestudio_temp_table;
PRAGMA foreign_keys = 1;";
            dbc.Database.ExecuteSqlCommand(script);
        }
        

这些SQL语句可以借用工具SQLiteStudio生成,只需要复制一份数据库,在数据库中做修改,保存前会自动生成SQL语句。同样的再Down方法中把改回来的SQL写上。

以上是我自己摸索的使用方式,如果有错误请指出,谢谢!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 语言是如何被使用的? SQLite是一种轻量级的关系型数据库管理系统,它被广泛地用于各种平台上,包括C语言。在C语言SQLite提供了简单易用的API来访问数据库。SQLite API由大约40个函数组成,可以在程序执行各种各样的数据库操作。 在C语言使用SQLite是非常方便的。只需要下载SQLite库文件,然后在程序包含相关的头文件,就可以开始使用SQLite API。SQLite API包括创建数据库、查询数据、修改数据等许多功能。其最常用的函数包括 sqlite3_open()、sqlite3_exec()、sqlite3_prepare_v2()、sqlite3_step()、sqlite3_finalize() 等。 使用SQLite API的第一步是打开一个数据库,可以使用 sqlite3_open() 函数来打开一个SQLite数据库文件。一旦数据库被打开,就可以使用 SQLite SQL 来执行各种数据库操作,如创建表、插入数据、查询数据等。这些操作可以使用 sqlite3_exec() 函数来执行。 对于复杂的操作,可以使用 sqlite3_prepare_v2() 和 sqlite3_step() 函数来执行。sqlite3_prepare_v2() 函数用于准备 SQL 语句,而 sqlite3_step() 函数用于执行 SQL 语句并获取结果。最后,可以使用 sqlite3_finalize() 函数来释放资源。 总之,SQLite是一种非常强大而又易于使用的数据库管理系统,在C语言可以很方便地使用它来处理数据。它不仅可以用于开发桌面应用程序,也可以用于移动应用程序和嵌入式系统。 ### 回答2: 语言的用途是什么? SQLite是一种轻量级的关系型数据库管理系统,它可以嵌入到C语言,并被广泛用于各种应用程序的数据存储和管理。SQLite的独立性和可移植性使得它成为最受欢迎的嵌入式数据库之一。 在C语言使用SQLite可以快速、高效地管理大量数据,包括存储、查询、更新和删除等操作。SQLite还提供了各种功能强大的API,使得开发人员可以轻松地与数据库进行交互,以实现各种复杂的数据操作,例如事务处理、查询优化和数据加密等。 由于SQLite使用纯C语言编写,因此它可以在几乎所有支持C语言的平台上运行,包括Windows、Linux、Unix和Mac OS X等操作系统。此外,SQLite还提供了多语言支持,使得它可以在不同的编程语言使用,例如Python、Java和PHP等。 总之,SQLite在C语言的用途非常广泛,它为开发人员提供了一种高效、可靠且易于使用的数据库管理系统,极大地简化了应用程序的数据处理和管理。 ### 回答3: 语言的作用是什么? SQLite是一种轻量级的关系型数据库管理系统,是一款由C语言编程实现的程序库,无需独立的服务器进程或系统,而是直接读取或写入磁盘上存储的文件。在C语言SQLite扮演了一种存储数据的角色,使得开发者可以很方便地将数据存储在本地文件,不再需要依赖其他的数据库管理系统。 在C语言的开发SQLite减少了对复杂的数据库管理软件的依赖性,同时提升了对数据的处理速度和效率。它使用简单,易于维护,并且可以与其他编程语言相互通信,这意味着它在各种应用程序开发都具有广泛的应用。使用SQLite,开发者可以轻松地创建、读取、更新和删除数据,使得我们可以更加专注于应用程序的逻辑开发。 因此,总的来说,SQLite在C语言的作用主要是为了快速、简单地存储和管理数据,让开发者专注于业务逻辑的开发,提高软件开发的效率和质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值