LINQ to SQL 输出与预期不同,如何解决?

LINQ to SQL outputting different than intended, how to resolve?

项目背景: 在 Azure 上托管的数据库和站点,在 VS 2015 中开发。

我试图显示我的 table 之一中所有条目的所有行,但我得到的输出与我预期的不同。我不确定这是因为我的编码还是因为 table 的创建方式或其他一些我没有想到的原因,所以我们感谢您的帮助。

这是我从数据库中提取它的代码(在名为 EmployeesRepository 的文件中):

public static List<Employee> GetAllEmployees()
{
    return dataContext.Employees.ToList();
}

这是我将数据发送到控制器的代码(在名为 EmployeesController 的文件中):

[Route("api/employees")]
public HttpResponseMessage Get()
{
    var employees = EmployeesRepository.GetAllEmployees();
    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, employees);
    return response;
}

这里是 angular 代码(在我的 employees.html 文件中):

<table class="table table-striped table-hover" style="width:100%">
    <thead>
        <tr class="info">
            <th ng-click="doSort('username')">Username</th>
            <th ng-click="doSort('firstName')">First Name</th>
            <th ng-click="doSort('lastName')">Last Name</th>
            <th ng-click="doSort('ext')">Extension</th>
            <th ng-click="doSort('location')">Location</th>
            <th ng-click="doSort('jobtitle')">Job Title</th>
            <th>&nbsp;</th>
        </tr>
    </thead>
    <tbody>
        <tr ng-repeat="Employee in Employees | filter:textFilter | orderBy:sortBy:reverse">
            <td>{{ Employee.username }}</td>
            <td>{{ Employee.firstName }}</td>
            <td>{{ Employee.lastName }}</td>
            <td>{{ Employee.ext }}</td>
            <td>{{ Employee.location }}</td>
            <td>{{ Employee.jobtitle }}</td>
        </tr>
    </tbody>
</table>

它似乎在做的是提取所有外键并为其余数据创建引用,angular 不知道如何输出引用。我将提供我从 POSTman 抓取的 JSON 输出,这样你就可以看到它在做什么。 angular在我的table中正确识别了6个对象,并为数据分配了6行,但只显示第一条记录,其余只是空白。关于为什么这样做有什么建议吗?

[
  {
    "$id": "1",
    "location1": {
      "$id": "2",
      "employees": [
        {
          "$ref": "1"
        },
        {
          "$id": "3",
          "location1": {
            "$ref": "2"
          },
          "equipments": [
            {
              "$id": "4",
              "employee": {
                "$ref": "3"
              },
              "tickets": [
                {
                  "$id": "5",
                  "employee": {
                    "$ref": "3"
                  },
                  "employee1": {
                    "$id": "6",
                    "location1": {
                      "$id": "7",
                      "employees": [
                        {
                          "$ref": "6"
                        }
                      ],
                      "id": 1,
                      "locName": "Prime BR Clinic",
                      "addrss": "1481 Airline Hwy",
                      "phoneNum": "225-778-0000"
                    },
                    "equipments": [],
                    "tickets": [],
                    "tickets1": [
                      {
                        "$ref": "5"
                      },
                      {
                        "$id": "8",
                        "employee": {
                          "$ref": "3"
                        },
                        "employee1": {
                          "$ref": "6"
                        },
                        "equipment": {
                          "$id": "9",
                          "employee": {
                            "$ref": "1"
                          },
                          "tickets": [
                            {
                              "$ref": "8"
                            }
                          ],
                          "barcode": "PTR-000000001",
                          "condition": "InUse",
                          "assignedTo": "ebeyj",
                          "notes": "Runs very slow.",
                          "configDate": "1905-07-03T00:00:00"
                        },
                        "id": 3,
                        "title": "Fake Ticket",
                        "customer": "landrya",
                        "barcode": "PTR-000000001",
                        "assignedTo": "hofmannr",
                        "category": "Installation",
                        "importance": "low",
                        "openDate": "1905-06-05T00:00:00",
                        "dueDate": "1905-06-05T00:00:00",
                        "closedDate": "1905-06-05T00:00:00",
                        "comments": "  ",
                        "condition": "Closed",
                        "workHours": 99
                      }
                    ],
                    "username": "landrya",
                    "email": "landrya@*****.com",
                    "lastName": "Landry",
                    "firstName": "Ashley",
                    "ext": 4300,
                    "location": 1,
                    "jobtitle": "HR Rep"
                  },
                  "equipment": {
                    "$ref": "4"
                  },
                  "id": 0,
                  "title": "Fake Ticket",
                  "customer": "landrya",
                  "barcode": "COM-000000001",
                  "assignedTo": "hofmannr",
                  "category": "TroubleShoot",
                  "importance": "low",
                  "openDate": "1905-06-05T00:00:00",
                  "dueDate": "1905-06-05T00:00:00",
                  "closedDate": "1905-06-05T00:00:00",
                  "comments": "VPNs are a piece of SSH IT",
                  "condition": "Closed",
                  "workHours": 99
                }
              ],
              "barcode": "COM-000000001",
              "condition": "InUse",
              "assignedTo": "hofmannr",
              "notes": null,
              "configDate": "1905-06-20T00:00:00"
            }
          ],
          "tickets": [
            {
              "$ref": "5"
            },
            {
              "$ref": "8"
            }
          ],
          "tickets1": [],
          "username": "hofmannr",
          "email": "hofmannr@******.com",
          "lastName": "Hofmann",
          "firstName": "Ritchie",
          "ext": 5002,
          "location": 0,
          "jobtitle": "IT GURU"
        },
        {
          "$id": "10",
          "location1": {
            "$ref": "2"
          },
          "equipments": [
            {
              "$id": "11",
              "employee": {
                "$ref": "10"
              },
              "tickets": [
                {
                  "$id": "12",
                  "employee": {
                    "$ref": "1"
                  },
                  "employee1": {
                    "$ref": "10"
                  },
                  "equipment": {
                    "$ref": "11"
                  },
                  "id": 2,
                  "title": "Imaginary Ticket",
                  "customer": "mcmorrisv",
                  "barcode": "MON-000000001",
                  "assignedTo": "ebeyj",
                  "category": "TroubleShoot",
                  "importance": "mid",
                  "openDate": "1905-06-20T00:00:00",
                  "dueDate": "1905-06-15T00:00:00",
                  "closedDate": null,
                  "comments": null,
                  "condition": "Open",
                  "workHours": 0
                }
              ],
              "barcode": "MON-000000001",
              "condition": "Terminated",
              "assignedTo": "mcmorrisv",
              "notes": null,
              "configDate": "1905-06-17T00:00:00"
            }
          ],
          "tickets": [],
          "tickets1": [
            {
              "$ref": "12"
            }
          ],
          "username": "mcmorrisv",
          "email": "mcmorrisv@******.com",
          "lastName": "McMorris",
          "firstName": "Vivian",
          "ext": 4200,
          "location": 0,
          "jobtitle": "I am sure she does something around here."
        },
        {
          "$id": "13",
          "location1": {
            "$ref": "2"
          },
          "equipments": [],
          "tickets": [],
          "tickets1": [
            {
              "$id": "14",
              "employee": {
                "$id": "15",
                "location1": {
                  "$ref": "2"
                },
                "equipments": [],
                "tickets": [
                  {
                    "$ref": "14"
                  }
                ],
                "tickets1": [],
                "username": "xier",
                "email": "xier@******.com",
                "lastName": "Xie",
                "firstName": "Richard",
                "ext": 5000,
                "location": 0,
                "jobtitle": "IT Paladin"
              },
              "employee1": {
                "$ref": "13"
              },
              "equipment": {
                "$id": "16",
                "employee": null,
                "tickets": [
                  {
                    "$ref": "14"
                  }
                ],
                "barcode": "COM-000000002",
                "condition": "StandBy",
                "assignedTo": null,
                "notes": null,
                "configDate": "1905-07-07T00:00:00"
              },
              "id": 1,
              "title": "Pseudo-Ticket",
              "customer": "pans",
              "barcode": "COM-000000002",
              "assignedTo": "xier",
              "category": "Special Request",
              "importance": "high",
              "openDate": "1926-11-02T00:00:00",
              "dueDate": "1926-11-02T00:00:00",
              "closedDate": null,
              "comments": "Developer accused of undocumented code refuses to cmnt",
              "condition": "Open",
              "workHours": -1
            }
          ],
          "username": "pans",
          "email": "pans@******.com",
          "lastName": "Pan",
          "firstName": "Sharon",
          "ext": 4100,
          "location": 0,
          "jobtitle": "Accounts Payable Manager"
        },
        {
          "$ref": "15"
        }
      ],
      "id": 0,
      "locName": "Prime Corp",
      "addrss": "1481 Airline Hwy",
      "phoneNum": "225-408-0000"
    },
    "equipments": [
      {
        "$ref": "9"
      }
    ],
    "tickets": [
      {
        "$ref": "12"
      }
    ],
    "tickets1": [],
    "username": "ebeyj",
    "email": "ebeyj@******.com",
    "lastName": "Ebey",
    "firstName": "Joseph",
    "ext": 5001,
    "location": 0,
    "jobtitle": "IT Jedi"
  },
  {
    "$ref": "3"
  },
  {
    "$ref": "6"
  },
  {
    "$ref": "10"
  },
  {
    "$ref": "13"
  },
  {
    "$ref": "15"
  }
]

问题的出现是因为您有共享对象(或潜在的共享对象),然后将它们序列化为 JSON。本文详细解释:http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization.

您还应该阅读:Using JavaScript to deserialize references in a complex object graph from SignalR/Json.NET