gpt4 book ai didi

c# - 为什么 Entity Framework 在使用存储库模式时不跟踪更改?

转载 作者:行者123 更新时间:2023-11-30 12:26:31 25 4
gpt4 key购买 nike

我正在使用存储库模式,我的更新方法如下所示:

    public virtual void Update(T entity)
{
DbEntityEntry dbEntityEntry = dataContext.GetEntry(entity);
if (dbEntityEntry.State == EntityState.Detached)
{
dbSet.Attach(entity);
}

string d1 = dbEntityEntry.CurrentValues.GetValue<string>("Description");
string d2 = dbEntityEntry.OriginalValues.GetValue<string>("Description");

bool b = d1 == d2;

dbEntityEntry.State = EntityState.Modified;
}

我首先获取实体,然后对属性进行更改,然后更新实体。在这种情况下,条目的状态永远不会 Detached,因此永远不会调用 Attach()

如果我更改 Description 属性,我可以看到原始值和当前值不同。如果属性保持不变,则原始值和当前值都相同。

GetEntry只是我的 DBContext 中的一个包装方法:

public DbEntityEntry GetEntry(object entity)
{
return base.Entry(entity);
}

我的 Controller Action 是这样的:

    public IHttpActionResult Update(int id, CustomerTypeDTO customerTypeDto)
{
var entity = customerTypeService.Get(id);

entity.Number = customerTypeDto.Number;
entity.Description = customerTypeDto.Description;

entity = customerTypeService.Save(entity);

return Ok<CustomerTypeDTO >(Mapper.Map<CustomerTypeDTO >(entity));
}

但是,EF 会发送一条 SQL 语句,其中包含用于更新的所有实体字段,无论它们是否已更改都无关紧要。

为什么 EF 会这样?

最佳答案

用这一行:

dbEntityEntry.State = EntityState.Modified;

您是在告诉 Entity Framework 实体已被修改。不管它是否真的被修改过。

因此 EF 发送一条包含所有实体字段的 SQL 语句以进行更新。

关于c# - 为什么 Entity Framework 在使用存储库模式时不跟踪更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28214151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com