JSON和EF6名称冲突

时间:2014-02-12 14:58:03

标签: json entity-framework

我有一个用于测试的小型SQL Server 2012“School”DB。它有这些TableName(FieldName1,FieldName2 ....):

课程(CourseNo,CourseName),学生(StudentId,StudentName,Birth),Enrollment(EnrollNo,StudentNo,CourseId)

注册表使用外键将学生链接到课程 - CourseNo:CourseID和StudentId:StudentNo

在VS2013网站中创建EF模型图时,注册实体显示“导航”到课程和学生

我在html页面中使用JSON来访问“Controller”,它使用EF6和linq从数据库中检索数据以填充jQuery Mobile应用程序中的页面。第一个测试是在html表中列出“Course”表的内容。如果我的EF模型只包含课程表,则代码完美无缺。如果我添加了Student和Enrollment表(并且不执行任何其他操作),则代码将失败并显示调试器信息,指出JSON无法解决命名问题。所有字段名称都是唯一的,但“注册”表格导航显示“课程”和“学生”。显然,任何涉及相同名称的引用都会导致JSON失败。作为一项测试,使用Gridview将ASP页面添加到站点,使用完全相同的数据库检索代码,并且所有三个表都存在,效果非常好。

在尝试组合JSON和EF6-linq时,我是否缺少某些内容?

以下是html方面的重要部分:

  $.getJSON("api/CourseTitles",
                           function (data) {
                               $('#coursenames').empty(); // Clear the table body.
                               // Loop through the list of courses.
                               $.each(data, function (key, val) {
                                   // Add a table row for the course.
                                   $('#coursenames').append('<tr><td>' + val.CourseNo + '&nbsp;&nbsp;&nbsp;' +
                                           '</td><td>' + val.CourseName + '</td></tr>');
                               });
                           });
 .................
                            <table>
                                <thead>
                                    <tr><th>Number</th><th>Name</th></tr>
                                </thead>
                                <tbody id="coursenames"></tbody>
                            </table>

这是控制器代码:

    Public Function GetCourseTitles() As IEnumerable(Of Course)
        Dim myContext As New SchoolEntities1()
        Return From courselist In myContext.Courses Select courselist
    End Function

编辑 - 这有效:

       Public Function GetCourseTitles() As IEnumerable(Of Course)
        Dim myContext As New SchoolEntities()
        myContext.Configuration.ProxyCreationEnabled = False
        Return From courselist In myContext.Courses Select courselist
      End Function

1 个答案:

答案 0 :(得分:0)

您是否急于或懒惰加载相关实体?如果您将EF设置为延迟加载相关实体,那么您的控制器代码将仅返回课程数据,而不是默认情况下的任何相关数据。您可以使用Include方法在将数据返回到页面之前急切加载相关实体。