一、实体状态
EntityState枚举定义了实体的5种状态,包括:
- Added:添加;实体被context跟踪,但数据库中不存在,在SaveChanges时,将添加操作通知数据库
- Unchanged:未更改;实体被context跟踪和数据库中存在,实体属性值并未被改动
- Modified:修改;实体被context跟踪和数据库中存在,并且数据库中的属性值未被修改,在SaveChanges时,将修改操作通知数据库。
- Deleted:删除;实体被context跟踪和数据库中存在,但是已经标记为删除,在SaveChanges时,将删除操作通知数据库,并从context中清除。
- Detached:游离状态;实体未被context跟踪。
实例:将新实体添加到context
- 新实体可以通过DbContxt对象调用Add方法添加到context。这时实体的状态是Added,紧接着通过DbContext对象调用SaveChanges方法将数据插入到数据库中。
首先注入DbContext,
-
private readonly DbContext _dbContext;
接着创建实体数据并添加到数据库
public DSSuperRepository(DbContext dbContext)
{
this._dbContext = dbContext;
} - var book = new Book{Name = ".NET Book"};
- _dbContext.Add(book);
- _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。
这里重申一下,这只是一个实体插入或修改方法实现的思路,具体实现的时候要动动大脑做些调整。
未完待续……