EF6-SQLite-CodeFirst P1

本文介绍如何使用Entity Framework 6 (EF6) 和 SQLite 的 CodeFirst 方法进行数据库开发。主要内容包括安装 System.Data.SQLite,创建实体类和上下文类,配置连接字符串,安装 SQLite.CodeFirst 并进行数据库初始化测试。

入门篇,框架搭建,初始化

本文指在快速入门该框架,相当于学一门新语言然后输出“Hello World!”

1.安装System.Data.SQLite

安装以下包:
NuGet
预览更改:
预览更改

2.创建实体类

public class Student
{
    public int StudentID { get; set; }
    public string StudentName { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public byte[] Photo { get; set; }
    public decimal Height { get; set; }
    public float Weight { get; set; }
    public Grade Grade { get; set; }//年级
}
public class Grade
{
    public int GradeId { get; set; }
    public string GradeName { get; set; }
    public string Section { get; set; }
    public ICollection<Student> Students { get; set; }
}

3.创建上下文类

创建上下文有两种方式

3.1 通过App.config指定连接字符串

通过在App.config正常配置连接字符串,此方式适合数据库固定位置

<connectionStrings>
    <add name="SchoolSqlite" connectionString="Data Source=|DataDirectory|\Data\SchoolSqlite.db3" providerName="System.Data.SQLite.EF6" />
</connectionStrings>

假设上下文类为StudentContext,那么该类的构造函数应该是这样:

public StudentContext():base("SchoolSqlite")
{
	public DbSet<Student> Students { get; set; }
}

3.2 通过传入灵活的连接字符串

顾名思义,可以通过程序外部传入连接字符串初始化DbContext类。

需要使用以下DbContext的构造方法:

public DbContext(DbConnection existingConnection, bool contextOwnsConnection);

假设上下文类为StudentContext,那么该类的构造函数应该是下方代码所示:

备注:
SQLiteProviderFactory需引用System.Data.SQLite.EF6
DbConnection需引用System.Data.Common

static string dbPath = "Data Source=Data Source=|DataDirectory|\\Data\\SchoolSqlite.db3";
public static StudentContext Instance
{
    get
    {
        DbConnection sqliteCon = SQLiteProviderFactory.Instance.CreateConnection();
        sqliteCon.ConnectionString = dbPath;
        return new StudentContext(sqliteCon);
    }
}
private StudentContext(DbConnection con) : base(con, true) { }
public DbSet<Student> Students { get; set; }

4.安装SQLite.CodeFirst

因为本地不存在数据库时,需要用代码自动创建新数据库,所以需要安装

CodeFirst
在上下文类中重写OnModelCreating方法

备注:需引用using SQLite.CodeFirst

public class StudentContext : DbContext
{

    //public StudentContext() : base("SchoolSqlite")
    //{

    //}
    static string dbPath = "Data Source=|DataDirectory|\\Data\\SchoolSqlite.db3";
    public static StudentContext Instance
    {
        get
        {
            DbConnection sqliteCon = SQLiteProviderFactory.Instance.CreateConnection();
            sqliteCon.ConnectionString = dbPath;
            return new StudentContext(sqliteCon);
        }
    }
    private StudentContext(DbConnection con) : base(con, true) { }
    public DbSet<Student> Students { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new SqliteCreateDatabaseIfNotExists<StudentContext>(modelBuilder));
    }
}

5.测试

最后配置App.config,在标签中添加以下代码:

<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />

实际添加效果如下:
添加provider

添加一个按钮,测试:

private void btn_Init_Click(object sender, EventArgs e)
{
    var cxt = new StudentContext();
    var Zhangsan = new Student() { Name = "张三", Age = 25 };
    cxt.Students.Add(Zhangsan);
    cxt.SaveChanges();
    MessageBox.Show("初始化完毕!");
}

6.查看数据库存储

查看
源代码及文档地址:

  1. CSDN下载.
  2. 蓝奏云
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值