sql-server - EF Core 所有带有子项的 CURD 工作正常,但更新子项不起作用
问题描述
我有这个带有上下文的模型,它所有的 CURD 都可以正常工作,但是当更新国家时,只有在 SQL Server 中更新了城市的国家,但城市没有更新,为什么?!!!
public class MyContext : DbContext
{
public MyContext ()
{
}
public MyContext (DbContextOptions<MyContext> options)
: base(options)
{
}
public DbSet<Country> Countries { get; set; }
public DbSet<City> Cities { get; set; }
}
[Table("tblCountry")]
public class Country
{
public Country()
{
this.Cities = new HashSet<City>();
}
[Key]
[Column("countryID")]
public int Id { get; set; }
[Column("countryNo")]
public string No { get; set; }
[Column("countryADescr")]
public string Name { get; set; }
[Column("countryEDescr")]
public string NameEn { get; set; }
public virtual ICollection<City> Cities { get; set; }
[Column("countryNote")]
public string Note { get; set; }
}
[Table("tblCity")]
public class City
{
[Column("ccId")]
public int CountryId { get; set; }
[JsonIgnore]
public virtual Country Country{ get; set; }
[Column("cityId")]
public string Id { get; set; }
[Column("cityAName")]
public string Name { get; set; }
}
添加和删除并选择与孩子一起正常工作
此 api 无效更新(放置)仅更新国家,但未更新城市子项
[HttpPut("{id}")]
public async Task<IActionResult> PutCountrys(int id, Country country)
{
if (id != country.Id)
{
return BadRequest();
}
//_context.Countrys.Attach(country); // Must Not
_context.Entry(country).State = EntityState.Modified;
//City
// Not work ??!!!
//_context.Entry(country.Cities).State = EntityState.Modified;
//foreach (var city in country.Cities)
//{
// //_context.Entry(city).State = EntityState.Deleted;
// _context.Entry(city).State = EntityState.Modified;
//}
// Not work ??!!!
////var countryCity = await _context.Cities.SingleOrDefaultAsync(u => u.CountryId == country.Id);
//var oldCities = await _context.Cities.Where(u => u.CountryId == country.Id).ToListAsync();
//var oldCountry = await _context.Countrys.Include(i => i.Cities).SingleOrDefaultAsync(i => i.Id == id);
//var oldCities = oldCountry.Cities;
// Not work ??!!!
////_context.Entry(countryCity).State = EntityState.Modified;
//if (oldCities.Any())
//{
// foreach (var city in oldCities)
// {
// _context.Entry(city).State = EntityState.Deleted;
// }
//}
// Not work ??!!!
//var newCities = country.Cities;
//foreach (var city in newCities)
//{
// if (city.CountryId > 0)
// {
// //_context.Cities.Attach(city);
// _context.Entry(city).State = EntityState.Modified;
// }
//}
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!CountrysExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
我有这个带有上下文的模型,它所有的 CURD 都可以正常工作,但是当更新国家时,只有在 SQL Server 中更新了城市的国家,但城市没有更新,为什么?!!!
解决方案
推荐阅读
- javascript - ng-if 没有根据变量更新
- chef-infra - 刀:找不到命令
- python - 从列表中创建多个复选框并获取所有值
- powershell - PowerShell 脚本不会按顺序运行
- grails - com.nimbusds.jose.JOSEException:不支持的 JWS 算法 RS256,在使用 Auth0 令牌时必须是 HS256、HS384 或 HS512
- jquery - jQuery将单独的对象水平滚动在一起
- powershell - 在 Powershell 中将用户移动到禁用的 OU
- swift - 获取base64Encoded图像的真实尺寸
- postgresql - 如何从 csv 复制到 postgresql 表并忽略没有标题的列
- node.js - 将图像附加到 Messenger 中的 Facebook 登录按钮