EntityFramework6

一、实体状态

  EntityState枚举定义了实体的5种状态,包括:

  1. Added:添加;实体被context跟踪,但数据库中不存在,在SaveChanges时,将添加操作通知数据库
  2. Unchanged:未更改;实体被context跟踪和数据库中存在,实体属性值并未被改动
  3. Modified:修改;实体被context跟踪和数据库中存在,并且数据库中的属性值未被修改,在SaveChanges时,将修改操作通知数据库。
  4. Deleted:删除;实体被context跟踪和数据库中存在,但是已经标记为删除,在SaveChanges时,将删除操作通知数据库,并从context中清除。
  5. Detached:游离状态;实体未被context跟踪。

   实例:将新实体添加到context

  1.   新实体可以通过DbContxt对象调用Add方法添加到context。这时实体的状态是Added,紧接着通过DbContext对象调用SaveChanges方法将数据插入到数据库中。

          首先注入DbContext,

    1. private readonly DbContext _dbContext;
              public DSSuperRepository(DbContext dbContext)
              {
                  this._dbContext = dbContext;
              }

      接着创建实体数据并添加到数据库
    2. var book = new Book{Name = ".NET Book"};
    3. _dbContext.Add(book);
    4. _dbContext.SaveChanges();

 

  

  2.  将实体添加到context的另一种方法,将实体状态更改为Added

    这里还是使用上面已经注入的DbContex对象,

    var book = new Book{Name = ".NET Book"};

    _dbContext.Entry(book).State = EntityState.Added;

    _dbContext.SaveChanges();

  3.  实现实体插入或修改操作

    这里还是使用上面已经注入的DbContex对象,

    var book = new Book{bookId = 1;Name = ".NET Book"};

    _dbContext.Entry(book).State = book.bookId == 0 ? EntityState.Added:EntityState.Modified;

    _dbContext.SaveChanges();

    通过检查实体主键是否有值,主键没有值的情况下,将实体状态改为Added;主键有值的情况下,将实体状态改为Modified。

    这个简单的例子只是简单的诠释一个添加或修改的方法该如何实现。

    如果有人非得杠精的说,自己拿一个新的实体,然后给实体的主键附上值(原本的意思是要添加实体的),这里在处理的时候就会将实体的状态变为修改,最终操作就变成了修改操作,上面的例子完全不符合现实情况。那我只能说 :I 服了 YOU。

    这里重申一下,这只是一个实体插入或修改方法实现的思路,具体实现的时候要动动大脑做些调整。

    未完待续……

原文地址:https://www.cnblogs.com/shendaxian/p/9444471.html