麻烦复杂的祖父母/父/子关系实体框架SQL Server

时间:2013-05-24 16:32:05

标签: sql-server asp.net-mvc entity-framework

我在实体框架中遇到了关系问题,而且我很肯定大部分问题源于我无法为谷歌提供一个好的搜索词。但是..这是问题......

我在现有数据库中有一组5个表。这些表格的关系如下图所示。

Table Relationships

在我的代码中(带有Razor的MVC4,但不管语言如何都应该很明显),我正在做以下事情:

<p>Store: @Model.StoreName</p>
@foreach (var storeDepartment in Model.StoreDepartments)
{ 
    <p>Department: @storeDepartment.Department.DepartmentName</p>
    <p>Items:</p>
    <ul>
        @foreach (var storeDepartmentItem in storeDepartment.Department.StoreDepartmentItems)
        {
        <li>@storeDepartmentItem.Item.ItemName</li>
        }
    </ul>
}

问题在于我从其他商店(以及一些商品两次)获取商品记录,其中DepartmentID与当前商店相同。 (请不要问为什么我们为多家商店使用相同的DepartmentID ......我无法回答这个问题。)

为了解释上述情况,我们假设商店ABC有一个部门ID:1,名称:衬衫。在这个部门/商店中有一个物品ID:1,名称:Green Shirt。

商店DEF有一个部门ID:1,名称:衬衫。在这个部门/商店有一个物品ID:1,名称:Green Shirt,以及物品ID:2,名称:Red Shirt。

当我在商店ABC的上面代码中运行它时,它会显示:

商店:ABC
部门:衬衫
项目:
- 绿色衬衫
- 绿色衬衫
- 红衬衫

在Entity Framework中是否有办法从Department部门检索StoreDepartmentItems中的记录以考虑当前的StoreID?

提前致谢, 埃文

编辑:为了清楚起见,我可以通过更改行来避免重复:

@foreach (var storeDepartmentItem in 
    storeDepartment.Department.StoreDepartmentItems)

为:

@foreach (var storeDepartmentItem in 
    storeDepartment.Department.StoreDepartmentItems.Where(a=>a.StoreID == Model.StoreID))

但是,这似乎对视图开发人员施加了更大的压力,这不是我的偏好。

1 个答案:

答案 0 :(得分:0)

从StoreDepartmentItems中删除StoreId 虽然您的图表没有显示哪些是主键 在我看来,你不需要它,因为DepartmentId映射到StoreDepartment,它也有StoreId。

您的问题可能是一个StoreDepartmentItem可以与您当前结构的两个不同商店相关联