Удаление связанных данных Entity Framework

150
02 августа 2019, 04:10

Есть связанные классы:

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'.

Answer 1

Все решилось простой жадной загрузкой вложенностей

Theme currenttheme = db.DbThemes.Include(c =>c.Materials).FirstOrDefault(p => p.Id == theme.Id);
currenttheme.Materials.Clear();
db.DbThemes.Remove(currenttheme);
db.SaveChanges();
READ ALSO
В c# определить переменную условной компиляции в другом проекте

В c# определить переменную условной компиляции в другом проекте

Можно ли в c#, visualstudio определить переменную условной компиляции в другом проекте?

144
Бинарная сериализация

Бинарная сериализация

Мне необходимо была бинарная сериализация в один файл, предположим, datadat

197
DataVisualisation.Tolkit Spline chart wpf

DataVisualisation.Tolkit Spline chart wpf

Подскажите как с помощью DataVisualisationTolkit посторить сплайн график, как должна выглядить xaml разметка ? Если можно небольшой пример

148
Как подгрузить .dll файлы к .exe? [дубликат]

Как подгрузить .dll файлы к .exe? [дубликат]

На данный вопрос уже ответили:

146