2016-11-09 2 views
0

Ich habe eine Postgres-Datenbank und mit asp.net Core MVC (+ ef). Die Datenbank wird korrekt erstellt. Ich habe zwei Tabellen 'Module' und 'ModuleMenu'. Ich möchte alle Menüs für ein bestimmtes Modul bekommen, aber ich kann die linq-Abfrage nicht erstellen.NullReferenceException bei Join mit Postgres EF Provider

Situation

Modell: Module.cs

namespace project.Model 
{ 
    public class Module 
    {  
     [Required] 
     public string ID { get; set; } 

     [Required] 
     public string Name { get; set; } 

     [Required] 
     public string Description { get; set; } 
    } 
} 

Modell: ModuleMenu.cs

namespace project.Models 
{ 
    public class ModuleMenu 
    { 
     [Required] 
     public string ID { get; set; } 

     public int ModuleID { get; set; } 

     [Required] 
     public string Title { get; set; } 

     [ForeignKey("ModuleID")] 
     public virtual Module Module { get; set; } 
    } 
} 

ApplicationDbContext.cs

namespace project.Data 
{ 
    public class ApplicationDbContext 
    { 
     public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
      : base(options) 
     { 
     } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      base.OnModelCreating(modelBuilder); 
     } 


     public DbSet<Module> Modules { get; set; } 

     public DbSet<ModuleMenu> ModuleMenus { get; set; } 
    } 
} 

Abfrage

public List<ModuleMenu> GetModuleMenus(){ 
    var query = from m in _dbContext.ModuleMenus 
       join mod in _dbContext.Modules on 
        m.ModuleID equals mod.ID 
       select m; 

    return query.ToList(); 
} 

Fehler

fail: Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[0] 
     An exception was thrown attempting to execute the error handler. 
System.NullReferenceException: Object reference not set to an instance of an object. 

Kann mir jemand helfen, richtig die Abfrage zu erstellen?

+1

Wouter, lesen Sie in diesem Hilfe http://stackoverflow.com/help/tagging Thema auf, wie man richtig Tags und warum sie nicht in der Frage Titel zu erzwingen. Verwenden Sie den Titel eher, um Ihr Problem in einem kurzen Satz zu beschreiben, dann wird es für die Leute einfacher sein, von der Frage-Seite zu erraten, ob sie eine Antwort auf Sie haben oder nicht – Tseng

Antwort

2

Ist dieser Teil in Ihrem Code korrekt?

Es scheint, dass Sie möglicherweise einen Fehler in der für die fk verwendeten Art hatten. Unten habe ich den Typ geändert, um String statt Int zu sein.

basierend auf diesem Update könnte die Abfrage wie folgt aussehen.

0

Ich würde dieses Modell zu Fehler erwarten (ModelID und ID sind inkompatible Typen). Wenn das korrekt war, sollte Ihr Code funktionieren. Oder einfacher:

public List<ModuleMenu> GetModuleMenus() 
{ 
    return _dbContext.ModuleMenus.ToList(); 
} 
Verwandte Themen