我有一个用于测试的小型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 + ' ' +
'</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
答案 0 :(得分:0)
您是否急于或懒惰加载相关实体?如果您将EF设置为延迟加载相关实体,那么您的控制器代码将仅返回课程数据,而不是默认情况下的任何相关数据。您可以使用Include方法在将数据返回到页面之前急切加载相关实体。