文章开始之前,先看下运行效果和界面:
点击查询项目,弹出Sqlite数据库中的项目表的项目数据。该表一共2条数据,如上图所示。
本篇文章是可供生产过程中实际使用的项目代码,源码价值较高,文章最后会附上源码。本项目构建的数据库操作,支持完整的原子事务。
先看下项目源码结构:
一、前言
本项目源码,集成了Sqlite和SqlCe两种本地数据库,同样的,如果您需要更多的本地数据库,仅需按接口实现即可。
二、引入Nuget包
Sqlite需要引入以下包:
Sqlite.CodeFirst
System.Data.Sqlite
System.Data.Sqlite.Ef6
System.Data.Sqlite.Ef6.Migrations
System.Data.Sqlite.linq
另外,Sqlite还需要SQLite.Interop.dll,它在你编译通过后,在Practice.DataBase的bin目录下有个x86文件夹,在那里藏着。
SqlCe需要引入以下包:
EntityFramework.SqlServerCompact
三、创建你的DbContext
由于我们需要集成多个本地数据库,所以,会构造一个DbContext基类,不管你是几个本地数据库,你可能期望它们的数据库表是一样的,所以,这就可以抽象出来一个DbContext基类。
为了演示方便,DbContext提供了一个Project(项目表)、Template(模板表)共2张表。所以DbSet定义如上图的Projects和Templates所示。
然后我们定义了SqliteContext类,让它继承自ContextSets基类。同理,SqlCe是一样的道理。
如此,我们就创建了数据库上下文的定义类。
四、构建种子数据
如图,我们点击查询项目时,查询数据库的Project表(项目表),会得到2条数据。
这个数据,是生成数据库时构建的种子数据。
通过实现DbMigrationsConfiguration<>类,可以构建种子数据。
很好,我们实现了Seed方法,并添加了2条种子数据。如下图:
五、生成迁移脚本并生成数据库
打开Visual Studio->工具->Nuget包管理器->程序包管理控制台。
以Sqlite生成为例:
生成迁移脚本:Add-Migration -ConfigurationTypeName SqliteConfiguration Initialize
在窗口中输入上述代码后,会生成下图的Migrations文件夹,这是由系统生成的。
生成数据库:Update-Database -ConfigurationTypeName SqliteConfiguration
执行生成数据库的指令后,会在你的bin目录下看到Pratice.db文件,这就是你的Sqlite数据库。
为什么迁移指令需要带上-ConfigurationTypeName这个属性?因为我设计的这个本地数据库项目,支持多种本地数据库,所以,如果不指定是哪种数据库的话,是无法迁移的。
六、构建你的数据库业务逻辑
上图提供了ProjectStore类,它实现了Store<,>基类:
这是Store基类的定义,您可以看到,提供了数据库的基础操作,您可以增加自己需要的操作。
好的,最后在Winform界面下测试一下你的代码。
祝您用餐愉快。
源码地址:https://download.****.net/download/mazhiyuan1981/13011831