Я новичок в C # Entity Framework (6). Я создал три класса - Страна - Область - Субрегион
Между страной и территорией существует отношение многих ко многим. Между Районом и Подрайоном существует еще одно отношение многих ко многим.
Страна может содержать много областей, но есть также области, которые принадлежат более чем одной стране). То же самое для области и подрайона.
Я создал соответствующие классы, и таблицы базы данных были созданы автоматически. Также были созданы таблицы для CountryAreas и SubAreaAreas, поэтому все выглядит хорошо. Также внешние ключи выглядят хорошо.
Когда я создаю новый объект Country с соответствующими областями и подрайонами, добавление в базу данных работает нормально (см. Код ниже).
Теперь я попытался добавить только новую область (с новыми подрайонами) к существующему объекту 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;
}