Пример ситуации (я спросил это более непосредственно и не получил обратную связь, поэтому, пожалуйста, простите абстрактный пример, но я просто пытаюсь поставить вопрос лучше):Как определить, отсутствует ли зависимая от объекта EF?
Для краткости (фактические модели сотни строк). База данных смоделирована для представления домов. В доме могут быть комнаты, окна и дворы. В комнате могут быть мебель или электроника. Мебель может быть диваном, столом или стулом. Кушетка имеет узор, материал и размеры.
Дом г-на Ф. Бар - выставочный зал для сумасшедших диванов в баре. Каждый месяц комнаты г-на Бар показывают сотни кушеток. Г-н Бар любит знать, когда люди любят его кушетки, и обратная связь сохраняется для каждой установки комнаты.
Г-н Эд, брат мистера Бар, управляет своей системой управления базами данных. Г-н Эд решает удалить кушетку, которая не использовалась какое-то время!
Предположим, что это удаление принимается, архивируется или помещается в раздел или помечено как неактивное (то есть оно не блокируется, что является опцией здесь).
Как можно определить отсутствие этого зависимого кушетки в доме, в котором есть комната, которая ссылается на удаленную кушетку из запроса linq с использованием Entity Framework 4.1?
Вызывающий запрос может выглядеть так (для краткости я оставил только актуальные разделы), но у него будет исключение, которое трудно поймать.
public House getHouse(object id){
using(DbContext context = new FooBarContext()){
DbSet<House> dbSet = context.Set<House>();
IQueryable<House> query = dbSet;
query = query.Where(h => h.HouseKey == id);
query = query.Include(h => h.Room);
query = query.Include(h => h.Room.Couch);
}
return query.ToList();
}
var house = getHouse(9).FirstOrDefault();
Дом будет заселен правильным домом. Он будет включать в себя правильный набор номеров. Однако в одной комнате будет ссылка на диван, который сломан. Любой try{}catch{}
до этого момента не приведет к исключению исключений. Это только для дома с индексом номер 9. В этот момент в коде это легко может быть списком многих разных домашних композиций.
Как я могу убедиться, что дом, содержащий комнату, содержащую удаленную кушетку, пойман?
Вы не можете ответить? Они должны быть сделаны вручную, чтобы включить логику для экранирования и не могут быть выполнены через linq. –
Знаете ли вы идентификатор дивана? –
@SteveMallory - Не заранее. –