我正在尝试使用实体框架更新记录。对于两个字段 PropertyGroupingId 和 PropertyStatusId ,如果它们不同/已修改,则它们会正常更新,但如果未更改(相同
我正在尝试使用实体框架更新记录。对于两个字段 PropertyGroupingId 和 PropertyStatusId ,如果它们不同/已修改,则它们会正常更新,但如果未更改(与数据库中的值相同),则它们将存储为 null。
如果字段根据数据库没有变化,则以下方法使该字段为空,例如,如果记录的 PropertyStatusId = 12 并且在数据库中也是 12,则在更新时它将变为空。
public async Task Edit(Property record)
{
if (Context == null)
{
throw new RuntimeWrappedException("Must Initialize Context in child constructor");
}
Repo.Update(record);
await Context.SaveChangesAsync();
}
或者,这种方法对我有用:
public async Task Edit(Property record)
{
if (Context == null)
{
throw new RuntimeWrappedException("Must Initialize Context in child constructor");
}
// Preserving the ids.
var gId = record.PropertyGroupingId;
var sId = record.PropertyStatusId;
// This step makes the fields (PropertyGroupingId and PropertyStatusId) null if unchanged.
await Context.Entry(record).Reference(p => p.PropertyGrouping).LoadAsync();
await Context.Entry(record).Reference(p => p.PropertyStatus).LoadAsync();
// Only in case of unmodified data according to db.
// Since above step make the fields null, I've to assign them back from preserved.
if(record.PropertyGroupingId == null)
{
record.PropertyGroupingId = gId;
}
if(record.PropertyStatusId== null)
{
record.PropertyStatusId= sId;
}
Repo.Update(record);
await Context.SaveChangesAsync();
}
我的问题是为什么会发生这种情况?
是否存在 ef 核心错误?或者我必须加载关系虚拟对象。