【EF】Entity Framework快速入门

什么是Entity Framework

简单的说就是

不用你创建Model实体类,不用你编写sql语句,就能实现与数据库数据交互

 

 

在SSMS创建两个表,用于测试

也可以直接在EF中设计模型

 

使用VS2017

在项目中添加实体数据模型

这里,直接选择“来自数库的EF设计器”

来自数库的EF设计器:

基于现有数据库在 EF 设计器中创建一个模型。您可以选择数据库连接、模型设置以及要在模型中包括的数据库对象。从该模型生成您的应用程序将与之交互的类。

空EF设计器模型:

在 EF 设计器中创建一个空模型作为以可视化方式设计您的模型的起点。之后,可以从您的模型生成数据库。从该模型生成您的应用程序将与之交互的类。

空Code First模型:

创建一个空的 Code First 模型作为使用代码设计您的模型的起点。之后,可以从您的模型生成数据库。

来自数据库的Code First:

基于现有数据库创建 Code First 模型。您可以选择数据库连接、模型设置以及要包括在模型中的数据库对象。

连接数据库

 

选择表

生成模型

可以通过右键菜单进行不同操作

从数据库更新模型:数据库修改后,可以进行该操作,更新模型

根据模型生成数据库:生成sql脚本

添加代码生成项:根据模型生成实体模型

创建后

其中有三个重要的类

Student.cs下的Student

public partial class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public Nullable<int> Grade { get; set; }
    public Nullable<int> Class { get; set; }
    public Nullable<int> Score { get; set; }
    public string Description { get; set; }
}

Score.cs下的Score

public partial class Score
{
    public int ID { get; set; }
    public Nullable<int> StudentID { get; set; }
    public Nullable<int> CourseID { get; set; }
    public Nullable<double> Score1 { get; set; }
}

School.Context.cs下的SchoolEntities

public partial class SchoolEntities : DbContext
{
    public SchoolEntities()
        : base("name=SchoolEntities")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public virtual DbSet<Score> Scores { get; set; }
    public virtual DbSet<Student> Students { get; set; }
}

 

问题:当我们在数据库添加字段后,模型怎么同步?

方法1:在模型中右键点击从数据库更新模型,数据就会更新到模型,然后保存模型,会自动重新生成实体模型类

方法2:在模型中右键点击从数据库更新模型,数据就会更新到模型,然后选择菜单栏--生成--转换所有T4模板

 

问题:当在模型中添加字段后,怎么更新数据库?

方法1:在模型中右键点击根据模型生成数据库,会生成sql脚本,但是这样,会把所有的表都先删除,再创建,所有的数据都会清空

方法2:直接在数据库表中添加字段

在开发初期,表中没有重要数据时,可以使用方法1,执行脚本

如果数据库存在重要数据,必须保留,就只能在数据库表添加字段

 

 

接下来,就可以对数据库进行增删改查操作了

 

首先,创建一个数据库对象

 SchoolEntities school = new SchoolEntities();

添加一条记录

public void Add(Student stu)
{
    school.Students.Add(stu); 
    school.SaveChanges();
}

public void Add(Student stu)
{
    school.Entry(stu).State = EntityState.Added;
    school.SaveChanges();
}

添加多条数据

public void Add(List<Student> list)
{
    school.Students.AddRange(list);
    school.SaveChanges();
}

 

删除一条记录

public void Delete(Student stu)
{
    school.Students.Remove(stu);
    school.SaveChanges();
}

public void Delete2(Student stu)
{
    school.Entry(stu).State = EntityState.Deleted;
    school.SaveChanges();
}

删除多条记录

public void Delete(List<Student> list)
{
    school.Students.RemoveRange(list);
    school.SaveChanges();
}

public void Delete(List<Student> list)
{
    foreach (var item in list)
    {
        school.Entry(item).State = EntityState.Deleted;
    }
    school.SaveChanges();
}

 

修改一条记录

public void Update(Student stu)
{
    school.Entry(stu).State = EntityState.Modified;

    school.SaveChanges();
}

修改多条记录

public void Update(List<Student> list)
{
    foreach (var item in list)
    {
        school.Entry(item).State = EntityState.Modified;
    }
    school.SaveChanges();
}

修改单个列,比如只修改Name字段

public void Update(Student stu)
{
    school.Students.Attach(stu);

    school.Entry(stu).Property(s => s.Name).IsModified = true;

    school.SaveChanges();
}

school.Entry(stu).Property("Name").IsModified = true;

 

查询全部Students

var list = school.Students.ToList();

根据条件查询

var stus1 = school.Students.Where(s => s.Name == "哈哈").ToList();

根据主键查询

var stu1 = school.Students.Find(2);

一条记录

var stu = school.Students.FirstOrDefault(s => s.Name == "哈哈");

 

 

 

 

相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页