Есть связанные классы:
public class Theme: Model
{
public int Id { get; set; }
public List<Material> Materials { get; set; }
public int? ParentId { get; set; }
public virtual Path Parent { get; set; } // сейчас не имеет значения
}
public class Material:Model
{
public int Id { get; set; }
public int? ParentId { get; set; }
public virtual Theme Parent { get; set; }
}
Как удалить только объект класса Theme? Чтобы объекты Material остались в таблице, но Parent и ParentId обнулились. Пробовал так:
Theme currenttheme = db.DbThemes.SingleOrDefault(p => p.Id == theme.Id);
//currenttheme.Materials.Clear();
db.DbThemes.Remove(currenttheme);
db.SaveChanges();
И так:
Theme currenttheme = db.DbThemes.SingleOrDefault(p => p.Id == theme.Id);
currenttheme.Materials.Clear();
db.DbThemes.Remove(currenttheme);
db.SaveChanges();
Все равно выдает ошибки.В двух случаях:
SqlException: The DELETE statement conflicted with the REFERENCE constraint "FK_dbo.Themes_dbo.Paths_ParentId". The conflict occurred in database "userstore", table "dbo.Themes", column 'ParentId'.
Все решилось простой жадной загрузкой вложенностей
Theme currenttheme = db.DbThemes.Include(c =>c.Materials).FirstOrDefault(p => p.Id == theme.Id);
currenttheme.Materials.Clear();
db.DbThemes.Remove(currenttheme);
db.SaveChanges();
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости