示例情况(我已经更直接地提出了这个问题并且没有收到任何反馈,所以请原谅这个抽象的例子,但我只是想更好地提出这个问题):
为简洁起见(实际模型有数百行)。对数据库进行建模以表示房屋。房子可以有房间、窗户和院子。一个房间可以有家具或电子产品。家具可以是沙发、桌子或椅子。沙发具有图案、材料和尺寸。
F. Bar 先生的房子是 Bar's Crazy Couches 的展示厅。每个月,Bar 先生的房间都会展示数百张沙发。Bar 先生喜欢知道人们何时喜欢他的沙发,并为每个房间设置保留反馈。
Bar 先生的兄弟 Ed 先生运行他的数据库管理系统。埃德先生决定搬走有一段时间没用过的沙发!
假设该删除被接受、存档、或放置在分区中、或标记为非活动的(即它没有被阻止,这是一个选项)。
如何在一个房间中确定这个依赖沙发的缺失,该房间的房间引用了使用 Entity Framework 4.1 从 linq 查询中移除的沙发?
调用查询可能看起来像这样(为简洁起见,我只留下了主题部分),但它会有一个难以捕捉的异常。
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 的房屋。在代码中,这很容易成为许多不同房屋组成的列表。
我怎样才能确保房子里有一个房间,里面有一个被拆除的沙发?