我是C#实体框架(6)的新手。我创建了三个类-国家-区域-子区域
国家和地区之间存在多对多关系。区域和分区之间还有另一对多的关系。
一个国家可以包含许多区域,但是也有属于多个国家的区域。面积和分区面积相同。
我创建了各自的类,并且数据库表已自动创建。也已经创建了CountryAreas和SubAreaAreas的表,因此看起来都不错。另外,外键看起来还不错。
当我创建一个新的Country Object(国家/地区对象)并将各自的Areas和SubAreas添加到数据库时,效果很好(请参见下面的代码)。
我现在试图仅将一个新的Area(带有新的SubAreas)添加到现有的Country对象中,但是我不知道这应该如何工作。
事实上,我想添加新的Area对象(或数据库条目),并让Entity Framework更新所有关系(以及相应的表)。如果我尝试为现有区域添加新的SubArea对象,则同样适用。
感谢您的帮助:-)
public class Country
{
[Key]
public string Name { get; set; }
public List<Area> Areas { get; set; } // virtual enabled lazy loading
}
public class Area
{
[Key]
public string Name { get; set; }
public virtual List<SubArea> Subareas { get; set; }
public virtual List<Country> Countries { get; set; }
}
public class SubArea
{
[Key]
public string Name { get; set; }
public virtual List<Area> Areas { get; set; }
}
public class LocationScoutContext : DbContext
{
public LocationScoutContext()
: base("name=LocationScout")
{
}
public DbSet<Country> Countries { get; set; }
public DbSet<Area> Areas { get; set; }
public DbSet<SubArea> SubAreas { get; set; }
}
// *** this works fine
internal static bool AddCountry(Country newCountry, out string errorMessage)
{
bool success = true;
errorMessage = string.Empty;
try
{
using (var db = new LocationScoutContext())
{
db.Countries.Add(newCountry);
db.SaveChanges();
}
}
catch (Exception e)
{
errorMessage = BuildDBErrorMessages(e);
success = false;
}
return success;
}
// *** this does not work
internal static bool UpdateCountry(Country upCountry, out string errorMessage)
{
bool success = true;
errorMessage = string.Empty;
try
{
using (var db = new LocationScoutContext())
{
var country = db.Countries.SingleOrDefault(o => o.Name == upCountry.Name);
country.Areas = upCountry.Areas;
db.Entry(country).State = EntityState.Modified;
var result = db.SaveChanges();
}
}
catch (Exception e)
{
errorMessage = BuildDBErrorMessages(e);
success = false;
}
return success;
}