2016-06-21 2 views
0

Я пытаюсь получить некоторые данные из трех таблиц базы данных в виде. Поэтому я использую класс, где я включаю два других класса со списком.invalidoperationexception on actionresult

Один из этих двух включенных классов работает нормально, а другой вызывает InvalidOperationException в контроллере ActionResult.

Это то, что я до сих пор производится:

Классы

namespace ArrangeAppointments.Models 
{ 
    public class Appointment : IAppointment 
    { 
     #region Implementation of IAppointments 
      public int UserId { get; set; } 
      public string Title { get; set; } 
      public string Description { get; set; } 
      public string Duration { get; set; } 
      public virtual List<Invitee> Invitees { get; set; } 
      public virtual List<Occasion> Occasions { get; set; } 
     #endregion 
     public int AppointmentId { get; set; } 


namespace ArrangeAppointments.Models 
{ 
    public class Invitee : IInvitee 
    { 
     public int Id { get; set; } 
     public int AppointmentId { get; set; } 
     public string Email { get; set; } 
     public string Presence { get; set; } 
     public virtual Appointment Appointment { get; set; } 


namespace ArrangeAppointments.Models 
{ 
    public class Occasion : IOccasion 
    { 
     public int Id { get; set; } 
     public int AppointmentId { get; set; } 
     public DateTime ocDate { get; set; } 
     public DateTime ocTime { get; set; } 
     public string Location { get; set; } 
     public virtual Appointment Appointment { get; set; } 

ActionResult

[HttpGet] 
public ActionResult NewApp(int Id) 
{ 
    if (Id == 0) 
    { 
     return View(); 
    } else { 
     try 
     { 
      using (var db = new MainDbContext()) 
      { 
       Appointment appointment = db.Appointments.Find(Id); 
       if (appointment == null) 
       { 
        return HttpNotFound(); 
       } 
       else 
       { 
        return View("NewApp", appointment); 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
      Console.WriteLine(e.InnerException); 
      return View(); 
     } 
    } 
} 

Объект 'назначение' в ActionResult заполнена всеми необходимыми данными, за исключением Список для случая. Это вызывает исключение. Однако это исключение не вызывает событие catch.

В чем причина этого исключения?

DbContext класс

namespace ArrangeAppointments 
{ 
    public class MainDbContext : DbContext 
    { 
     public MainDbContext() : base("name=DefaultConnection") 
     { 
     } 

     public DbSet<User> Users { get; set; } 

     public DbSet<Appointment> Appointments { get; set; } 

     public DbSet<Invitee> Invitees { get; set; } 

     public DbSet<Occasion> Occasions { get; set; } 
    } 
} 
+0

где это бросить исключение? вы используете ленивую загрузку, покажите нам класс dbcontext – Thorarins

+0

Я еще добавил класс DbContext. – wintee

+0

Единственный способ, которым я вижу исключение, - это проверить содержимое объекта «назначение» при отладке ActionResult. – wintee

ответ

0

Вам необходимо включить списки

Appointment appointment = db.Appointments.include("Occasions").include("Invitees").SingleOrDefault(a => a.AppointmentId == Id); 
+0

Большое спасибо Thorarins за ваш опыт и терпение. Теперь он отлично работает. – wintee

+0

без проблем не забывайте отмечать ответ :) – Thorarins

Смежные вопросы