首页 > 解决方案 > 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 中更新了城市的国家,但城市没有更新,为什么?!!!

标签: sql-serverentity-frameworkef-code-firstcode-first

解决方案


推荐阅读