我在很多帖子中都看到,如果未启用跟踪,则会分离实体。
我想知道的是:怎样才能找到很少被跟踪的对象和一些被跟踪的对象?
有人可以共享代码段,该代码段显示上下文不会跟踪此实体。
根据 MSDN :
已分离:上下文未跟踪实体 https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
_context.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
}
分离的对象或在Entity Framework(EF)之外创建的对象没有启用自动跟踪。
在代码优先方法中创建POCO类就是分离实体的一个这样的例子。
这是唯一的情况吗?
答案 0 :(得分:0)
mov edx, 0
mov ecx, ebx
mov ecx, 2h
div ecx
mov ecx, eax
还有更多方案。
1.您不想跟踪实体。
Detached Object
在此查询中,不会跟踪检索到的实体,因此实体上的任何更改都不会记录到数据库中。
考虑一下。
var entity= context.MyEntities.AsNoTracking().Where(...).FirsOrDefault();
由于未跟踪此实体,因此不会保存更改 除非你附上这个。
entity.Name = "1";
context.SaveChanges();
2.考虑您在断开连接的架构(API,Web)上的工作。考虑具有PUT端点的员工API。
这会将员工附加到上下文并更新实体,因为上下文不知道此实体。
优势:无需从数据库中获取员工实体 缺点:其他用户更改事务之间的实体可能会被丢失(您仍然可以更新仅更改的属性)
var entry = _context.Entry<T>(entity);
if (entry.State == EntityState.Detached)
{
_context.Set<T>().Attach(entity);
entry.State = EntityState.Modified;
}
第二版
public void UpdateEmployee(Employee entity)
{
var entry = _context.Entry<Employee>(entity);
if (entry.State == EntityState.Detached)
{
_context.Attach(entity);
entry.State = EntityState.Modified;
}
Context.SaveChanges()
}