2016-11-09 78 views
0

我有一個postgres數據庫並使用asp.net核心mvc(+ ef)。數據庫已正確創建。我有兩個表'Module'和'ModuleMenu'。我想獲得給定模塊的所有菜單,但是我一直未能創建linq查詢。NullReferenceException加入Postgres EF提供程序

形勢

型號: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; } 
    } 
} 

型號: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; } 
    } 
} 

查詢

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

錯誤

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. 

誰能幫我正確地創建查詢?

+1

Wouter,請閱讀本幫助中心http://stackoverflow.com/help/tagging關於如何正確使用標籤以及爲什麼不強制他們進入問題標題的話題。而是使用標題以簡短的句子描述您的問題,然後人們可以從問題頁面更容易地猜出他們是否可以回答您的問題 – Tseng

回答

2

這段代碼是否正確?

public int ModuleID { get; set; } 

看來你可能在用於fk的類型中有錯誤。 下面我將類型改爲字符串而不是int。

public string ModuleID { get; set; } 

基於該更新,查詢可能如下所示。

public ModuleMenu[] GetModuleMenusForModule(string moduleId) 
{ 
    return _dbContext.ModuleMenus.Where(x => x.ModuleID == moduleId).ToArray(); 
} 
0

我期望模型發生錯誤(ModelID和ID是不兼容的類型)。如果這是正確的,你的代碼應該工作。或更簡單:

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