AsNoTracking - 实现Entity Framework 6中克隆数据库对象

通过IQueryable接口的AsNoTracking方法,可以实现脱离上下文(context)的数据库对象修改,实现克隆数据库对象的功能

AsNoTracking - 实现Entity Framework 6中克隆数据库对象

1 example

1
2
3
4
5
6
7
8
9
var entity = context.Entities
.AsNoTracking()
.Include(x => x.ChildEntities)
.FirstOrDefault(x => x.EntityId == entityId);

entity.SomeProperty = DateTime.Now;

context.Entities.Add(entity);
context.SaveChanges();
  • 须通过FirstOrDefault()或类似作用的函数取出唯一对象,再对唯一对象修改。

  • 不可以写作:

1
2
3
4
5
6
7
8
9
var entites = context.Entities
.AsNoTracking();

foreach(var item in entities)
{
item.SomeProperty = SomeValue;
context.Entities.Add(entity);
context.SaveChanges();
}
  • 需要一次查询一项、修改一项

2 reference

Entity Framework 6:克隆除ID外的对象? - tencent.com

当您从DataSet检索一个或多个实体时,您可以告诉EntityFramework不要跟踪您对该对象所做的任何更改,然后将该实体作为一个新实体添加到DataSet中。通过使用。作为NoTracking,上下文对现有实体一无所知。