EF-CodeFirst模式

973 阅读2分钟

EF.png

EF简介

​ EF全称是Entity Framework,是微软官方提供的ORM(Object Relational Mapping 对象关系映射)工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上。EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。开发人员使用Linq语言,对数据库操作如同操作Object对象一样省事。

​ EF由三种使用模式:1. Code First模式:由实体类生成数据库结构;2. Model First模式:通过数据库可视化设计器设计数据库,并生成实体类;3. Database First模式:由数据库生成实体类。

Code First模式

Code First模式我们称之为“代码优先”模式,是从EF4.1开始新建加入的功能。使用Code First模式进行EF开发时开发人员只需要编写对应的数据类(其实就是领域模型的实现过程),然后自动生成数据库。这样设计的好处在于我们可以针对概念模型进行所有数据操作而不必关系数据的存储关系,使我们可以更加自然的采用面向对象的方式进行面向数据的应用程序开发。

​ Code First模式的使用:

在Vs2017中新建一个名为EFDemo的控制台应用程序项目如下新建一个user类,和一个UserContext类:

EFDemo解决方案.png

User类:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EFDemo {
    public class User {
        [Key,Index]//设置Id为主键,并添加索引
        public int Id { get; set; }
        public string Name { get; set; }
        public string Password { get; set; }
    }
}

UserContext类:

using System.Data.Entity;
namespace EFDemo {
    public class UserContext :DbContext{
        public UserContext() : base("EFDemoConnectionString") { }

        public DbSet<User> User { get; set; }
    }
}

在建立UserContext中必须继承自 System.Data.Entity.DbContext类,才能有对数据的CRUD操作, 要使用DbContext类必须引用EntityFramework包.在NuGet中进行检索安装:

如下:

NuGet-EF.png

运行Main方法后,将自动生成数据库:

using System;
using System.Linq;

namespace EFDemo {
    class Program
    {
        static void Main(string[] args)
        {
            using(var context = new UserContext()) {
                var user = new User {
                    Id = 1,
                    Name = "user",
                    Password = "123",
                };
                context.User.Add(user);//新增一条数据
                context.SaveChanges();//保存更改.每一次对数据库的CUD操作都应该使用此方法
                var query = from a in context.User
                            where a.Id == 1
                            select a;//Linq 语句用户快速查询
                Console.Write($"UserId:{user.Id},UserName:{user.Name   },UserPassword:{user.Password}");
                Console.ReadKey();
            }
        }
    }
}

结果展示:

Console结果展示.png

数据库展示:

数据库展示1.png

数据库展示2.png