在EF Core DbContext中,attach方法不起作用

时间:2019-06-06 23:34:28

标签: entity-framework-core ef-core-2.2

我正在使用EF Core 2.2.4我具有以下实体

public partial class Person: IBaseEntity
{
    [Key]
    public int PersonID{ get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public DateTime CreatedDateTime { get; set; }
    public DateTime ModifiedDateTime { get; set; }
    public byte[] VersionStamp { get; set; }
}

然后在服务方法中,我仅修改Entity的某些属性

 public async Tak Update()
 {
    var p= new Person();
    task.FirstName = "Foo";

   _dbContext.Attach<Person>(p);
   _dbContext.SaveChanges();
 }

如果我没有记错的话,当不跟踪实体并且您只想更改某些属性时,将使用Attach方法。

但是,上面的代码什么都不做。当我运行SqlProfiler时,我看不到在SaveChanges()上执行任何sql

我是否需要明确告知EF属性已修改?像

_dbContext.Entry<Person>(p).Property(p => p.FirstName).IsModified = true;

1 个答案:

答案 0 :(得分:0)

当您有一个完整的实体实例但未被跟踪时,将使用Attach方法。附加实体后,将对其进行跟踪,并且EF Core假定其内容与当前数据库状态匹配。它提供了此功能,而无需从数据库中加载它。 Attach方法通过将实体的状态设置为未更改来实现此目的。因此,您的呼叫

_dbContext.SaveChanges();

不执行任何查询,因为任何实体都没有更改。

您可以使用其他功能

var entity = new MyEntity();
context.Update(entity);