2016-06-21 13 views
0

Ich versuche, einige Daten aus drei Datenbanktabellen in eine Ansicht zu bekommen. Daher verwende ich eine Klasse, in der ich zwei andere Klassen mit einer Liste einschließe.invalidoperationexception on actionresult

Eine dieser zwei eingeschlossenen Klassen funktioniert gut, aber die andere verursacht eine InvalidOperationException in einem Controller ActionResult.

Das ist, was ich bisher produziert haben:

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; } 

Action

[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(); 
     } 
    } 
} 

Klassen

Das Objekt 'Termin' in der Action mit allen erforderlichen Daten gefüllt ist, mit Ausnahme die Liste für den Anlass. Dies verursacht die Ausnahme. Diese Ausnahme löst jedoch das Catch-Ereignis nicht aus.

Was verursacht diese Ausnahme?

DbContext Klasse

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

, wo es die Ausnahme wirft? Verwenden Sie Lazy Loading, zeigen Sie uns die dbcontext-Klasse – Thorarins

+0

Ich habe die DbContext-Klasse noch hinzugefügt. – wintee

+0

Die einzige Möglichkeit, die Ausnahme zu sehen, ist, wenn ich den Inhalt des "Termin" -Objekts beim Debuggen des ActionResultes überprüfe. – wintee

Antwort

0

Sie müssen die Listen enthalten

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

Vielen Dank Thorarins, für Ihr Fachwissen und Ihre Geduld. Es funktioniert jetzt gut. – wintee

+0

kein Problem vergessen Sie nicht, die Antwort zu markieren :) – Thorarins

Verwandte Themen