zoukankan      html  css  js  c++  java
  • EF中的上下文(DbContext)简介

    DbContext是实体类和数据库之间的桥梁,DbContext主要负责与数据交互,主要作用:

    1、DbContext包含所有的实体映射到数据库表的实体集(DbSet < TEntity >)。

    2、DbContext 将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。

    3、更改跟踪: 它跟踪每个实体从数据库中查询出来后发生的修改变化。

    4、持久化数据: 它也基于实体状态执行插入、更新和删除操作到数据库中。

    DbContext中的DbSet

    DbSet表示上下文中指定类型的所有实体的集合或可从数据库中查询的指定类型的所有实体的集合。

    DbSet常用方法

    TestDBContext tdb = new TestDBContext();

    Add(Entity)/AddRange

    return添加

    的Entity

    添加实体到context中,并给实体标记Added状态

    tdb.Persons.Add(entityModel);

     AsNoTracking<Entity>   

    获取一个不被context缓冲和追踪的序列,多用于只读序列

    var personList = tdb.Persons.AsNoTracking<Person>().ToList<Person>();

     Attach(Entity)

    return添加

    的Entity

     将实体添加到context上下文中

    tdb.Persons.Attach(entityModel);

     Find(int)

    return对应id

    的Entity

    通过主键获取实体对象,如果在数据库和context中不存在那么返回null,注:会返回在context中存在但还没写入数据库的实体对象

    Person personEntity = tdb.Persons.Find(1);

     Include  

     include必须是外键连接,且立即执行;join连接不需要外键,延时执行

    var personList = tdb.Persons.Include("PersonName").ToList<Person>();

    var personList= tdb.Persons.Include(s => s.PersonName).ToList<Person>();

     Remove/RemoveRange

    retrun删除

    的entity

    删除实例,并给实例对象添加deleted标记

    tdb.Persons.Remove(EntityModel);

     SqlQuery  

     通过sql获取实例集合,默认返回的集合是被追踪的,可以使用AsNoTracking()取消追踪

    var personEntity = tdb.Persons.SqlQuery("select * from T_Person where id = 1").FirstOrDefault<Person>();


     

    在EF中实体的五种状态:

    1.detached:实体不在上下文的追踪范围内,如刚new的实体,可以通过Attach()添加到上下文,此时状态为unchanged。

    2.unchanged:未改变,如刚从数据库读取出来的实体。

    3.added:添加状态,一般执行Add/AddRange时标记为added。因为新对象在数据库中没有记录,所以不能转为deleted和modified状态。

    4.deleted:删除状态,一般执行Remove/RemoveRange时标记为deleted,不能转换为added状态。

    5.modified:修改状态,改变了实体的属性会处于这个状态,能转为deleted状态,不能转换为added状态。

    EF如何判断状态

    为当前对象(需要追踪的)创建一个DbEntityEntry对象,此对象包含:

    Current Value(当前值)/Original Value(原始值)/Database Value(数据库里的值)

    只需要比较这三个值,很容易就知道哪些属性被修改了。

    设置context.Configuration.AutoDetectChangesEnabled = false则不会去追踪,默认是true。

    也可以自己指定状态:

  • 相关阅读:
    from 的使用
    Form组件 钩子方法
    session cookie 中间件
    Django 中购物车的登录 注册 退出
    python安装
    Skeleton-Based Action Recognition with Directed Graph Neural Network
    Two-Stream Adaptive Graph Convolutional Network for Skeleton-Based Action Recognition
    Everybody Dance Now
    Collaborative Spatioitemporal Feature Learning for Video Action Recognition
    python安装第三方库--换镜像源
  • 原文地址:https://www.cnblogs.com/linybo/p/13260267.html
Copyright © 2011-2022 走看看