我在实体框架中遇到了关系问题,而且我很肯定大部分问题源于我无法为谷歌提供一个好的搜索词。但是..这是问题......
我在现有数据库中有一组5个表。这些表格的关系如下图所示。
在我的代码中(带有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))
但是,这似乎对视图开发人员施加了更大的压力,这不是我的偏好。
答案 0 :(得分:0)
从StoreDepartmentItems中删除StoreId 虽然您的图表没有显示哪些是主键 在我看来,你不需要它,因为DepartmentId映射到StoreDepartment,它也有StoreId。
您的问题可能是一个StoreDepartmentItem可以与您当前结构的两个不同商店相关联