zoukankan      html  css  js  c++  java
  • 实现Entity Framework SQLite Code First 开发

    前言:

             Entity Framework6 作为开源的O/RM框架(源码:https://github.com/dotnet/ef6),自身实现了Microsoft SQL Server 提供程序和Microsoft SQL Server Compact Edition 提供程序。同时可使用其他第三方的各种数据库提供程序:Oracle、MySQL、PostgreSQL、SQLite、Salesforce、DB2 和 SQL Server等。

             Entity Framework6 自身实现的Microsoft SQL Server 提供程序可以实现Code First开发,建议先看看这个帖:https://www.cnblogs.com/lucky-donkey/p/13532798.html

             本文主要介绍Entity Framework6实现SQLite数据库的Code First开发。

             由于Entity Framework6自身未实现SQLite数据库的提供程序,所以要实现SQLite数据库的Code First开发。需要实现两个功能:1、实现SQLite数据库的CRUD操作,2、实现SQLite数据库的迁移(Migration)功能。

    废话有点多了,还是要多动

    正文:

    1、创建一个控制台项目,如下图:

    2、安装nuget包:System.Data.SQLite 和 SQLite.CodeFirst,如下二图:

    3、修改App.config配置文件,对System.Data.SQLite引用的invariant值加后缀:.EF6,如下图:

    4、在App.config配置文件中,添加SQLite数据库连接串,如下代码:

    <connectionStrings>
        <add name="CourseraContext" connectionString="Data Source=|DataDirectory|Coursera.sqlite" providerName="System.Data.SQLite.EF6"/>
      </connectionStrings>
    View Code

        (注:|DataDirectory| 表示项目的相对路径:/bin/debug 或 /bin/release。 如是webform,则为相对路径:/App_Data)

    5、添加模型类Course和Student,如下代码:

          Course.cs

    public class Course
        {
            public int Id { get; set; }
            public string Name { get; set; }
    
            //使用虚拟方法的作用是:将启用实体框架的延迟加载功能。 
            //延迟加载是指在您尝试访问这些属性时,这些属性的内容将自动从数据库加载。
            public virtual List<Student> Students { get; set; }
        }
    View Code

          Student.cs

    public class Student
        {
            public int Id { get; set; }
    
            public string FirstName { get; set; }
            public string LastName { get; set; }
            //使用虚拟方法的作用是:将启用实体框架的延迟加载功能。 
            //延迟加载是指在您尝试访问这些属性时,这些属性的内容将自动从数据库加载。
            public virtual Course Courses { get; set; }
        }
    View Code

    6、添加数据库上下文类CourseraContext(类目必须与第4步骤的数据库连接串名称相同),如下代码:

          CourseraContext.cs

    public class CourseraContext: DbContext
        {
            public DbSet<Course> Courses { get; set; }
            public DbSet<Student> Students { get; set; }
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                //实现自动Migration
                var initializer = new SqliteDropCreateDatabaseWhenModelChanges<CourseraContext>(modelBuilder);
                Database.SetInitializer(initializer);
            }
        }
    View Code

    7、编写主程序Program.cs,实现在控制台中输入课程名并保存到数据库中,如下代码:

         Program.cs

    class Program
        {
            static void Main(string[] args)
            {
                EnterCourse();
            }
    
            protected static void EnterCourse()
            {
                string name = "";
                while (name != "0")
                {
                    Console.WriteLine("请输入课程:");
                    name = Console.ReadLine();
    
                    using (var db = new CourseraContext())
                    {
                        Course course = new Course();
                        course.Name = name;
                        db.Courses.Add(course);
                        db.SaveChanges();
                    }
                }
            }
        }
    View Code

    8、运行程序,按提示输入课程名:English,点击回车按键,如下图:

          然后打开项目下的/bin/Debug目录,找到数据库文件:Coursera.sqlite (这个名字和App.config配置文件中的数据库连接串中的数据库名一致)。

          查看数据库,可以看到表:Courses和Students都自动创建了,并且刚刚输入的课程名English也已保存到Courses表中。

          我用的是官方提供的:SQLite Expert Personal 5.x 个人免费版,可以自行下载:http://www.sqliteexpert.com/download.html)里面却没有任何表,如下图:

     

    9、修改模型类Course,增加属性:Url,如下代码:

    public class Course
        {
            public int Id { get; set; }
            public string Name { get; set; }
    
            /// <summary>
            /// 新增的属性Url
            /// </summary>
            public string Url { get; set; }
    
            //使用虚拟方法的作用是:将启用实体框架的延迟加载功能。 
            //延迟加载是指在您尝试访问这些属性时,这些属性的内容将自动从数据库加载。
            public virtual List<Student> Students { get; set; }
        }
    View Code

         再次运行程序,按提示输入课程名:数学,点击回车按键,然后查看数据库,可以看到Courses表增加了新字段Url,如下图:

  • 相关阅读:
    Reducing File Size
    程序设计中的命名
    代码进阶
    如何显示当前Mipmap级别?
    何时使用泛型集合
    Using Mono DLLs in a Unity Project
    lock关键字
    VSS/RSS/PSS/USS
    AssetBundle依赖
    WWW.LoadFromCacheOrDownload
  • 原文地址:https://www.cnblogs.com/lucky-donkey/p/13548017.html
Copyright © 2011-2022 走看看