我正在尝试将所有查询的IsoDataTables的ID完全清空或完全删除,然后再将其返回到前端。这个想法是(在这种情况下)它应该作为模板,并且我不希望它将ID返回给我,也不希望它们在前端被删除。
var applicationType = await _context.ApplicationType
.Include(m => m.IsoTableData)
.AsNoTracking()
.FirstOrDefaultAsync(m => m.Id == id);
if (applicationType == null)
{
return NotFound();
}
if (applicationType.IsoTableData != null)
{
foreach (IsoTableData isoTableData in applicationType.IsoTableData)
{
// error since it a not nullable primary key
isoTableData.Id = null;
}
}
return Ok(applicationType);
我找到了一种解决方法,可以复制对象并返回它们(不保存到数据库),但是我正在寻找更优雅的解决方案。
答案 0 :(得分:0)
我做的方法是创建一个带有所需字段的副本构造函数(或者基本上是一个对象的新实例)。我选择了一个拷贝构造函数,因为这种逻辑在其他地方也同样适用。另一个类似的解决方案是创建DTO对象,但是我在这里不需要它。有什么改进吗?
//in IsoFileApplicationType.cs
public IsoFileApplicationType(IsoFileApplicationType isoFileApplicationType)
{
Id = null
FullName = isoFileApplicationType.FullName;
Name = isoFileApplicationType.Name;
(...)
foreach (IsoTableData isoTableData in isoFileApplicationType.IsoTableData)
{
IsoTableData.Add(IsoTableData(isoTableData));
}
}
//in IsoTableData.cs
public IsoTableData(IsoTableData isoTableData)
{
Id = null;
Data = isoTableData.Name;
Age = isoTableData.Age;
(...)
}
// in CRUD controller
var applicationType = await _context.ApplicationType
.Include(m => m.IsoTableData)
.AsNoTracking()
.FirstOrDefaultAsync(m => m.Id == id);
if (applicationType == null)
{
return NotFound();
}
IsoFileApplicationType newIsoFileApplicationType = IsoFileApplicationType(applicationType);
return Ok(newIsoFileApplicationType);