gpt4 book ai didi

c# - 在 Entity Framework 6 中更新子对象

转载 作者:太空狗 更新时间:2023-10-30 00:48:55 27 4
gpt4 key购买 nike

(使用 Entity Framework 6.2)

我有以下两个模型/实体:

public class City
{
public int CityId { get; set; }
public string Name { get; set; }
}

public class Country
{
public Country()
{
Cities new HashSet<City>();
}

public int CountryId { get; set; }
public string Name { get; set; }
public virtual ICollection<City> Cities { get; set; }
}

和下面的 DbContext

public DbSet<Country> Countries { get; set; }

我的问题是:如果 Country 对象的子项发生变化(即城市),我该如何更新它?

我可以这样做吗:

List<City> cities = new List<City>();
// Add a couple of cities to the list...
Country country = dbContext.Countries.FirstOrDefault(c => c.CountryId == 123);
if (country != null)
{
country.Cities.Clear();
country.Cities = cities;
dbContext.SaveChanges();
}

那行得通吗?还是我应该专门添加每个城市?即:

List<City> cities = new List<City>();
// Add a couple of cities to the list...
Country country = dbContext.Countries.FirstOrDefault(c => c.CountryId == 123);
if (country != null)
{
country.Cities.Clear();
foreach (City city in cities)
country.Cities.Add(city);
dbContext.SaveChanges();
}

最佳答案

您需要将 Cities 添加到正在更新的特定 Country 对象。

public Country Update(Country country)
{
using (var dbContext =new DbContext())
{
var countryToUpdate = dbContext.Countries.SingleOrDefault(c => c.Id == country.Id);
countryToUpdate.Cities.Clear();
foreach (var city in country.Cities)
{
var existingCity =
dbContext.Cities.SingleOrDefault(
t => t.Id.Equals(city.cityId)) ??
dbContext.Cities.Add(new City
{
Id = city.Id,
Name=city.Name
});

countryToUpdate.Cities.Add(existingCity);
}
dbContext.SaveChanges();
return countryToUpdate;
}
}

更新:

  public class City
{
public int CityId { get; set; }
public string Name { get; set; }

[ForeignKey("Country")]
public int CountryId {get;set;}
public virtual Country Country {get; set;}
}

希望对您有所帮助。

关于c# - 在 Entity Framework 6 中更新子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411810/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com