如何解决EF Core 5 更新未更改的实体和属性
public abstract class BaseEntity
{
public int Id { get; set; }
}
public class Field : BaseEntity
{
public string Value { get; set; }
public Component Component { get; set; }
public string Status { get; set; }
public Field() { }
public Field(string value,Component component,string status = null)
{
Value = value;
Component = component;
Status = status;
}
}
public class Component : BaseEntity
{
public string Title { get; set; }
[ForeignKey("SmartObject")]
public int? SmartObjectId { get; set; }
public Component SmartObject { get; set; }
[ForeignKey("Parent")]
public int? ParentId { get; set; }
public Component Parent { get; set; }
public ComponentType Type { get; set; }
public virtual ICollection<Field> Fields { get; set; }
public IList<QueryComponent> Queries { get; set; }
public IList<ReportComponent> Reports { get; set; }
}
以及以下逻辑(这里是用伪代码编写的,可能我遗漏了一些东西,在这种情况下 - 道歉):
public class SampleClass
{
IFieldRepository _fieldRepository;
public SampleClass(IFieldRepository fieldRepository)
{
_fieldRepository = fieldRepository;
}
public void UpdateStatus()
{
var fieldList = _fieldRepository.GetById(3);
foreach (var item in updateFVList_Formatted)
{
item.Status = "new";
_fieldRepository.disableChange(item);
}
}
}
public class BaseRepository<TEntity> : IBaseRepository<TEntity> where TEntity : BaseEntity
{
internal ApplicationDBContext _context;
internal DbSet<TEntity> _entity;
public BaseRepository(ApplicationDBContext context)
{
_context = context;
_entity = _context.Set<TEntity>();
}
public void GetById(int ID)
{
return _entity.Where(x => x.Id == ID).ToList();
}
public void disableChange(Field field)
{
_context.Entry(field).State = EntityState.Unchanged;
_context.Entry(field.Component).State = EntityState.Unchanged;
}
}
我遇到的问题以及“disableChange”方法的原因是 EF Core 决定“组件”属性已更改或其他内容,并且在保存更改时,无论我做什么都与“ Component” - EF Core 更新数据库中的“Component”表并将其“ParentId”属性设置为 NULL
,以及任何其他实际更改。
因此,例如使用以下伪代码,如果省略对“disableChanges”的调用而我只调用 DbContext.SaveChanges()
,EF Core 将更新“Field”表中的条目和“ParentId”列“组件”表。
我尝试告诉 EF Core“组件”没有通过“disableChange”方法更改,但所做的只是省略了“字段”表中条目的更新子句。导致单个 UPDATE
到“组件”表。
我无法弄清楚为什么会发生这种情况以及如何预防。我希望 EF Core 只更新我实际更改的“字段”项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。