EF 基础(未完 待补充)

EF

EF(实体框架)是一种 orm 【对象关系映射】

省略掉 ADO.NET 操作数据库 简化访问数据库【核心是 ADO.NET 操作数据库 EF 对其进行了封装】

EF 的三种模式

添加 ADO.NET 实体数据模型

  1. DataBase First (数据库优先)首先生成数据库,根据数据库生成模型

  2. Model First(模型优先)

  3. Code First(代码优先)

EF 增删改查

查找

db.模型.find(id) 根据主键查找数据

CF cF = db.CF.Find(id);

或者
.where(lamda 表达式).FristOrDefault() 查找第一条数据

CF cF = (CF)db.CF.Where(c=>c.id==1).FirstOrDefault();

where 条件可以使用& 链接多个条件

CF cF = (CF)db.CF.Where(c=>c.id==1&c.name=="lili");

First() 取第一条数据 如果不存在会报错

SinglerOrDefault () 取单条数据 只能存在一条数据 多条数据时会报错

db.模型.FirstOrDefault(也可以写 lamda 表达式 n=>n.typeid=2)

CF cF = (CF)db.CF.FirstOrDefault(c=>c.id==1&c.name=="lili");

添加

Add() 和 AddRange()
操作相同 添加 单个模型 / 模型集合

db.CF.Add(cF);
db.SaveChanges();

修改

updatamodel() EF 在mvc 特有的方法

不能直接操作传递的模型 因为传递的有的数据是 null 的 直接修改会将其他参数覆盖修改为 null

根据主键查找到模型 在使用 updatamodel 会根据当前的传递的模型去修改查找的数据模型

CF c = db.CF.Find(cF.id);
UpdateModel(cF);
db.SaveChanges();

2.修改模型状态 将实体状态进行修改

db.entry<模型类>(需要修改的模型数据).state=system.data.entry.entrystate.modified;

  db.Entry(cF).State = EntityState.Modified;
  db.SaveChanges();

删除

.remove()/removerange()
操作相同 删除 单个模型 / 模型集合

 					CF cF = db.CF.Find(id);
            db.CF.Remove(cF);
            db.SaveChanges();

removerange() 删除外键关联表很方便 通过 lamda 表达式找到的外键关联的数据表 进行删除

添加/修改/删除完成后 都需要 savechanges() 保存提交到数据库

Code First 创建 EF

  1. 创建与数据库的映射关系 【配置数据库链接字符串】

    • 在 web.confing 配置数据库链接字符串
      在这里插入图片描述
  2. 创建与表的映射关系【创建模型、创建上下文类】

    • 创建模型(表)主键标记【key】
      在这里插入图片描述
    • 创建上下文类里的映射

请添加图片描述3. 运行项目时会自动创建数据库

数据库添加完成后 又进行的上下文类/模型的修改 报错
比如添加模型类里的字段,或者是再次添加新的模型类
1.删除数据库,运行项目 使其自动重新创建数据库(不实用 会删除之前库的所有数据)
请添加图片描述2.进行数据迁移

需要进行 数据迁移

https://blog.csdn.net/jixiaomeng821/article/details/25165553

请添加图片描述

数据迁移

不删库,去更新数据库

工具-NuGet 包管理器-程序包管理器控制台

请添加图片描述

1.开启迁移 enable-migrations -force
会自动生成文件
请添加图片描述

请添加图片描述

2.添加迁移关系 Add-Migration init(–init 为自定义名称)

请添加图片描述

3.更新数据库 update-database

//再次修改 可以对 2.3 步重复进行

整体代码块操作
请添加图片描述

自动迁移

非自动迁移可以修改迁移过程中的数据库的数据

自动迁移会失去对迁移数据库过程的控制权

请添加图片描述

更新数据库 2(有问题未解决)
//  引用 EntityFramework
 // DbContext  是  Entity Framework  中的一个类,它是一个轻量级的、封装了访问数据库的  API  的上下文类。
 //  它提供了对数据库的访问和操作,允许你在应用程序中执行各种数据库操作,如查询、插入、更新和删除。
 public class ExaminationEntities : DbContext
 {
     //  构造函数,用于初始化  ExaminationEntities  类的实例
     //  在构造函数中,调用基类  DbContext  的构造函数,并传递数据库连接字符串的名称
     public ExaminationEntities() : base("name=ExaminationEntities")
     {

     }

     //  数据库表映射,表示数据库中的  ExamBankTypes  表
     //  通过  DbSet<ExamBankType>  类型的对象,可以进行对  ExamBankTypes  表的访问和操作
     public DbSet<ExamBankType> ExamBankTypes { get; set; }

     //  重写  OnModelCreating  方法,用于配置实体类与数据库表之间的映射关系
     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
         //  将实体类  ExamBankType  映射到数据库中的名为  "ExamBankTypes"  的表
         modelBuilder.Entity<ExamBankType>().ToTable("ExamBankTypes");
     }
 }

// 表名映射,将实体类与数据库表 "ExamBankTypes" 关联起来
[Table("ExamBankTypes")]
public class ExamBankType
{
    // 主键属性,自动生成唯一标识符
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ExamBankTypeId { get; set; }


    public string Name { get; set; }


    public int ParentId { get; set; }


    public DateTime CreateTime { get; set; }


    public int IsDelete { get; set; }


    public int UserInfo_Id { get; set; }
}

更新数据库 3

在全局文件中 Global.asax.cs

设置在初始化时关闭 默认版本的上下文类 的初始化

DataBsae.SetInitializer<上下文类的名称>(null);

系统就会自动去 创建自己自定义 上下文类模型 的初始化

数据库中不会 更改 需要自己手动修改数据库的结构(自定义)

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值