2016-01-23 2 views
-1

Я новичок в инфраструктуре сущностей и ASP.NET. Я пытаюсь получить доступ к атрибутам свойств навигации. но я столкнулся с ошибкой «Объект ObjectContext был удален». чем у меня есть некоторые google и обнаружили, что он может быть исправлен data = db.tblCourses.Include(c => c.tblSection).ToList();, но я все еще сталкиваюсь с проблемой. Модель:ASP.NET: экземпляр ObjectContext удален

using System.Data.Entity; 
public List<tblCourse> editedCoursesView() 
{ 
    List<tblCourse> data; 
    using (enrolmentsystemEntities db = new enrolmentsystemEntities()) 
    { 
     data = db.tblCourses.ToList(); 
     data = db.tblCourses.Include(c => c.tblSection).ToList(); 
     return data; 
    } 
} 

tblCourse:

namespace enrolmentSystem.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class tblCourse 
    { 
     public tblCourse() 
     { 
      this.tblenrolments = new HashSet<tblenrolment>(); 
     } 

     public int CourseId { get; set; } 
     public string CourseName { get; set; } 
     public int departmentID { get; set; } 
     public int TeacherId { get; set; } 
     public int CreditHours { get; set; } 
     public int SectionId { get; set; } 

     public virtual tbldepartment tbldepartment { get; set; } 
     public virtual tblteacher tblteacher { get; set; } 
     public virtual ICollection<tblenrolment> tblenrolments { get; set; } 
     public virtual tblSection tblSection { get; set; } 
    } 
} 

tblRoom:

namespace enrolmentSystem.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class tblRoom 
    { 
     public tblRoom() 
     { 
      this.tblSections = new HashSet<tblSection>(); 
     } 

     public int RoomNo { get; set; } 
     public string Block { get; set; } 
     public int Capacity { get; set; } 

     public virtual ICollection<tblSection> tblSections { get; set; } 
    } 
} 

Контроллер:

[HttpGet] 
public ActionResult editCourse() 
{ 
    course c = new course(); 
    List<tblCourse> data = c.editedCoursesView(); 
    return View("editCourse", data);  
} 

Вид:

@model List<enrolmentSystem.Models.tblCourse> 
@{ 
    ViewBag.Title = "editCourse"; 

} 

<h2>Edit Course</h2> 
<table border="1"> 
    <tr style="text-align:center;"> 
     <td>Course ID</td> 
     <td>Course Name</td> 
     <td> Course Department ID</td> 
     <td> Course Teacher ID</td> 
     <td> Course CreditHours</td> 
     <td> Course StartTime</td> 
     <td> Course EndTime</td> 
     <td> MaxCapacity </td> 
     <td> Course RoomNo </td> 


    </tr> 
    @if (Model != null) 
    { 

     foreach (var i in Model) 
     { 
      <form action="~/Enrolment/editCourse" method="post"> 
       <tr> 


        <td>@i.CourseId <input name="id" type="hidden" value="@i.CourseId" /> </td> 
        <td><input type="text" name="name" value="@i.CourseName" required /></td> 
        <td><input type="number" name="dpId" value="@i.departmentID" required /></td> 
        <td><input type="number" name="teacherId" value="@i.TeacherId" required /></td> 


        <td><input type="number" name="creditHours" value="@i.CreditHours" required /></td> 
        <td><input type="text" name="startTime" value="@i.tblSection.startTime" required /></td> 
        <td><input type="text" name="endTime" value="@i.tblSection.endTime" required /></td> 
        <td><input type="number" name="capacity" value="@i.tblSection.tblRoom.Capacity" required /></td> 
        <td><input type="number" name="roomNo" value="@i.tblSection.RoomNo" required /></td> 
        <td> <input type="submit" value="Update Course" /> </td> 


       </tr> 
      </form> 
     } 
    } 
</table> 
+0

Почему вы делаете 'ToList()' дважды в вашем editedCoursesView) '' метода (? –

ответ

0

tblRoom может вызвать проблему, поскольку она не включена, но указана в представлении. Как правило, эта ошибка означает, что вы пытаетесь Lazy Load some property, но контекст уже был удален.

Используйте .Include(x => x.ApplicationsWithOverrideGroup.NestedProp) или .Include(x => x.Collection.Select(y => y.Property)), чтобы включить вложенное имущество или коллекцию.

В вашем случае использования:

public List<tblCourse> editedCoursesView() 
{ 
    List<tblCourse> data; 
    using (enrolmentsystemEntities db = new enrolmentsystemEntities()) 
    { 
     data = db.tblCourses 
      .Include(c => c.tblSection) 
      .Include(c => c.tblSection.tblRoom) 
      .ToList(); 
     return data; 
    } 
} 
+0

во втором варианте есть ли средство сбора таблицы и свойства означает поле этой таблицы? –

+0

Используйте 'Include (x => x.foo.bar)', когда у вас есть простая папка в вашей модели и 'Include (x => x.foo.select (y => y.bar))' когда 'foo' представляет собой набор объектов, например 'List ', и каждый из этих объектов имеет свойство 'bar', которое вы также хотите загрузить. – csharpfolk

+0

Извините, можете дать мне пример из моего кода. я попробовал, но это дало ошибку. –