• EntityFramework 简单入个门


     任何一个和数据相关的系统里,数据持久化都是一个不容忽视的问题。

      一直以来,Java 平台出了很多 NB 的 ORM 框架,Hibernate、MyBatis等等。.NET 平台上,ORM 框架这一块一直没有一个能吊到让几乎所有开发人员改掉以拼写 SQL 语句访问数据库的习惯。

      实际上,在 .NET 平台上,也层出不穷的出现了很多类似的玩意儿,比如Nhibernate、Ibatis,还有微软的亲儿子——坑爹的 LinqToSQL。虽然这么多框架,但是真的没见过 .NET 平台的 ORM 框架能像 Java 里那样普及。

      所幸,微软又搞出来一个儿子——EntityFramework。前几个版本没用过,前几天直接了解了6.1.3版本的。。感觉,真 TMD 好用。。

      鉴于网上的所有教程都太教条式,入门时看起来很坑爹,所以将这篇心得做为随笔,供大家共同学习探讨。

    一、安装框架

      首先,要添加环境。右键项目,可以在 NuGet 里直接安装。如下图:

      

      安装完成以后,项目引用里新增了两个关于EntityFramework的引用,如下图:

       到此,环境就配置好了。

     二、创建Context类和模型类

      0,准备数据库。

      写代码之前,我们得先有一个测试数据库,和一个测试表。

      这里我使用 SQLServer,表结构如下:

      EF的使用有三种模式:Model First、DataBase First 和 Code First。这几种First什么区别,没仔细研究。不过我这里使用的好像是 Code First 构建的项目。这种方式,我只是觉得方便,好用,感觉项目更干净,不用添加乱七八糟的代码和配置。

      1,添加模型类。

      EF 里的模型类和普通的类一样,无非是为类或属性添加一些属性标记对表的关系进行一些映射罢了。如下: 

    复制代码
        [Table("Users")]
        public class UserInfo
        {
            [Key]
            [StringLength(20)]
            [Column("Code")]
            public string Code { get; set; }
    
            [StringLength(20)]
            public string Name { get; set; }
        }
    复制代码

       上面代码中,定义了以下几个关键信息:

        1,类 UserInfo 对应数据库里的 Users 表。

        2,Code 属性对应数据库里的 Code 字段(如果属性名和字段名相同,可以忽略这个配置,比如 Name 属性)。

        3,并且指明两个字符型属性的长度不能超过20个字符。

        4,指示 Code 属性所对应的列是主键列。

      (注:Table、Key、StringLength、Column 这几个类需要引用命名空间 System.ComponentModel.DataAnnotations 和 using System.ComponentModel.DataAnnotations.Schema )

       2,添加 DbContext 类。

       DbContext 类是 EF 的核心,封装了所有数据存取业务相关的逻辑。不管是增删改查还是事务什么什么,所有的数据库操作的业务都可以在这里搞定。。听起来很牛逼!

      听起来很牛逼,事实上更牛逼!

      虽然很牛逼,但是用起来超级简单。比如像下面的代码,就实现了一个简单的 DbContext 类:

    复制代码
        public class DALContext : DbContext
        {
            public DALContext() : base("name=DALContext")
            {
            }
    
            public virtual DbSet<UserInfo> Users { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
    
            }
        }
    复制代码

      寥寥几行,完成了复杂的 DB 操作。

      上面代码简单说明一下:

        1,这个类名自己起,想叫啥叫啥,我这里叫 DALContext。

        2,这个类必需继承 DbContext 类。

        3,在构造方法里,调用父类的构造方法,指明如何连接数据库,这里可以是连接字符串,也可以是配置文件里配置的连接名称(连接名称必需前缀 name= )。

        4,virtual 声明的 DbSet<T> 类型的属性里封装了一大堆数据操作的业务逻辑,我们只需要操作该属性就行了。

        5,有几个表,就声明几个 DbSet<T> 类型的属性就行了。T 是前面代码中声明的 Model ,属性名自己随便起。

        6,OnModelCreating 方法有什么用?具体的我也不知道。

      (这个类要引用命名空间 System.Data.Entity)

      3,配置连接字符串

      打开配置文件,添加一个名为 DALContext 的连接字符串配置。如下图:  

      (打开配置文件我们会发现,里面多了一些关于 entityFramework 的奇怪的东西。至于是不是必要的,删了会不会死人,我也不知道)

      至此,数据库表的映射就Ok了。

     
    三、编写测试代码

      废话不说,上代码:

    复制代码
            static void Main(string[] args)
            {
                using (DALContext db = new DALContext())
                {
                    try
                    {
                        db.Users.Add(new UserInfo() {
                            Code = DateTime.Now.Ticks.ToString(),
                            Name = "张三"
                        });
    
                        IEnumerable<UserInfo> users = db.Users.Where<UserInfo>(u => u.Name == "张三");
    
                        foreach(var u in users)
                        {
                            Console.WriteLine(string.Format("{0} - {1}",u.Code,u.Name));
                        }
    
                        db.SaveChanges();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
    
                Console.WriteLine("Press any key to exit");
                Console.ReadKey();
            }
    复制代码

      在 Main 方法里,我们声明了一个 DALContext 对象 db,为了便于对象资源的释放,这里使用 using  将其包起来。

      这段代码实现了以下功能:

        1,访问 db 对象 的 Users 属性,使用 Add 方法像操作一个集合一样向数据库表里增加一条记录。

        2,访问 db 对象 的 Users 属性,使用 Where 方法根据条件查询一批数据对象,保存在变量 users 里,并循环输出到控制台。

        3,使用 db 对象的 SaveChanges 方法,将对数据库的变更提交。

      运行以后,结果如下:

      上面例子实现了增加和查询功能,删除和修改功能类似于操作集合,只要保证最后调用 SaveChanges 方法将修改提交就行。

  • 相关阅读:
    【codecombat】 试玩全攻略 第二章 边远地区的森林 一步错
    【codecombat】 试玩全攻略 第十八关 最后的kithman族
    【codecombat】 试玩全攻略 第二章 边远地区的森林 woodlang cubbies
    【codecombat】 试玩全攻略 第二章 边远地区的森林 羊肠小道
    【codecombat】 试玩全攻略 第十七关 混乱的梦境
    【codecombat】 试玩全攻略 第二章 边远地区的森林 林中的死亡回避
    【codecombat】 试玩全攻略 特别关:kithguard斗殴
    【codecombat】 试玩全攻略 第二章 边远地区的森林 森林保卫战
    【codecombat】 试玩全攻略 第二章 边远地区的森林
    实验3 类和对象||
  • 原文地址:https://www.cnblogs.com/aeexiaoqiang/p/6531747.html
Copyright © 2020-2023  润新知