在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
先了解一下 EF 框架的 EntityState 在使用EF框架时, 我们通常都是通过调用 SaveChanges() 方法把增加/修改/删除的数据提交到数据库,但是上下文是如何知道实体对象是增加、修改还是删除呢? 答案是通过EntityState的枚举值来判断的。也就是说在操作数据库时,EF会根据EntityState这个枚举检测到实体的状态,然后执行相应的增/删/改操作。
Attach() :将给定实体以 System.Data.EntityState.Unchanged 状态附加到上下文中。 Attach执行成功的前提: 1. 如果上下文中已经存在与实体对象键值相同的对象A,则要求实体对象的内存地址必须与对象A相同,否则报错:“已有相同键值的对象存在上下文中......”。 2. 如果上下文中不存在与实体对象键值相同的对象,则要求实体对象的内存地址必须不在上下文中,否则会报错,系统认为在修改键值,这是不允许的。 例如,在删除中使用 public int Delete(T entity) { DB.Set<T>().Attach(entity); DB.Set<T>().Remove(entity); return DB.SaveChanges(); }
如果实体对象不在当前上下文中(指内存地址),则代理类对象的State为Detached,否则,为上下文中相应所处状态。 例如:在更新中使用 public int Updata(T entity,params string[] propNames) { var oldEntity = DB.Entry(entity); oldEntity.State = EntityState.Unchanged; foreach (var prop in propNames) { oldEntity.Property(prop).IsModified = true; } return DB.SaveChanges(); }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论