ASP.NET MVC 5 / C# Foreach 循环 - 重复相同的数据

ASP.NET MVC 5 / C# Foreach loop - repeats same data

这看起来很漂亮 'beginner' 但我很挣扎。

我有一个连接两个 table(EmployeeCars)的 SQL 服务器视图。我有那个视图的模型。

当我打开 SQL Server Management Studio 并使用匹配员工 A 的 Select * 条记录查询 SQL 服务器视图时。我得到两条记录,因为该员工只列出一次在 Employee table 中,在 Cars table 中两次。在 SQL Server Management Studio 中,我验证了上述人员的两个 Cars 是唯一的。应该是这样。

但我一定是在我的代码中做错了,在 ASP.NET MVC 5 应用程序中,因为当我加载 Index 视图时,它应该显示两个唯一的记录 - 它反而显示我两次完全相同的记录(同一辆车)。

在我的控制器中:

public ActionResult Index()
{
    string MyName = 
    System.Security.Principal.WindowsIdentity.GetCurrent().Name;
    String result = MyName.Substring(MyName.Length - 6);
    ViewBag.WhoAmI = result;

    UserPrincipal userPrincipal = UserPrincipal.Current;
    String name = userPrincipal.DisplayName;
    ViewBag.MyRealID = name;

    try
    {
        Web_Parkinglot_Header_FullViewRepository oItem = new 
        Web_Parkinglot_Header_FullViewRepository();
        Var item = oItem.GetbyLogon((string)result);
       
        if (!String.IsNullOrEmpty(result))
        {
        }                              

        return View(item.ToList());
    }

    catch (Exception ex)
    {
        throw ex;
    }
}

存储库:

public List<Web_Parkinglot_Header_FullView> GetbyLogon(string result)
{
    return this.Context.Web_Parkinglot_Header_FullViews.Where(a => a.logon_id == result).ToList();
}

查看:

foreach (var item in Model)
{
    <table class="table">
        <tr>
            <td>
                <img src="~/Content/images/bmw.png" width="75" height="50" />
            </td>
            <td>
                <b>Vehicle Make:</b> @Html.DisplayFor(modelItem => item.veh_make)
            </td>
            <td>
                <b>Model:</b> @Html.DisplayFor(modelItem => item.veh_model)
            </td>

            <td>
                <b>Color:</b> @Html.DisplayFor(modelItem => item.veh_color)
            </td>
            <td>
                <b>Plate:</b> @Html.DisplayFor(modelItem => item.veh_plate)
            </td>
        </tr>
    </table>
}

我不明白的是:为什么,当我直接查询 SQL 服务器视图时,我得到 logon_id = A 的正确 2 辆车。但是当我 运行 通过存储库进行相同的查询,我得到 2 条记录,但在 foreach 循环中它是相同的记录两次。

SQL 服务器视图是内部联接。我还可以 post 更多信息(型号等,如果需要的话)

在 Entity Framework.

中使用 views 时存在一个微妙的问题

如果您有 table,请将其与 EF 一起使用,您需要有一个 主键 来唯一标识每一行。通常,这是一个单独的列,例如ID 或类似的东西。

对于视图,您没有“主键”的概念 - 视图仅包含一些 table 中的一些列。

因此,当 EF 映射视图时,它找不到主键 - 因此,它将使用视图中的 所有 non-nullable 列 作为“替代”主键关键。

我不知道你的情况是什么 - 你应该可以从 .edmx 模型中分辨出来。

所以问题真的是你不能在视图上有明确的主键。

最简单的解决方案是 include 来自视图定义中涉及的 table 的主键(即使您不想显示它们曾经)。

那样的话,这些就会出现在视图中,并且它们会是 non-nullable,因此您应该没问题,不会得到任何重复项。