实体何时在实体框架中分离?

时间:2018-06-03 04:52:46

标签: entity-framework

我在很多帖子中都看到,如果未启用跟踪,则会分离实体。

我想知道的是:怎样才能找到很少被跟踪的对象和一些被跟踪的对象?

有人可以共享代码段,该代码段显示上下文不会跟踪此实体。

根据 MSDN

已分离:上下文未跟踪实体 https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx

根据我读的以下帖子: http://blog.maskalik.com/entity-framework/2013/12/23/entity-framework-updating-database-from-detached-objects/

var entry = _context.Entry<T>(entity);

if (entry.State == EntityState.Detached)
{
    _context.Set<T>().Attach(entity);
    entry.State = EntityState.Modified;
}

分离的对象或在Entity Framework(EF)之外创建的对象没有启用自动跟踪。

在代码优先方法中创建POCO类就是分离实体的一个这样的例子。

这是唯一的情况吗?

1 个答案:

答案 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()
 }