2017-03-24 61 views
0

我需要關於在我的程序中可能出現問題的建議。我收到以下錯誤:ASP.Net即使另一個表的數據庫查詢異常

NullReferenceException: Object reference not set to an instance of an object.

針對來自一個控制器的查詢,但不是運行相同DbContext連接的另一個控制器。

我決定用通用的ASP.Net Core WebAPI模板從頭開始重新開始。我在下面插入了我的兩個類,運行了一個構建,並將它們搭建到控制器和視圖中,沒有任何問題。我甚至有能力從SQL Server對象資源管理器(在Visual Studio 2015社區中)查看兩個表中的「查看數據」。我甚至將Order類中的Foreign Key引用移出給Company類。這一切都在一臺機器上的測試環境中,我擁有管理員權限和數據庫上的dbo。

public class Order{ } 
public class Company { } 

public class DataMineDbContext : DbContext 
{ 
    public DataMineDbContext(DbContextOptions<DataMineDbContext> options) : base(options) { } 
    public virtual DbSet<Company> Company { get; set; } 
    public virtual DbSet<Order> Order { get; set; } 
} 

public class CompaniesController : Controller 
{ 
    private readonly DataMineDbContext _context; 

    public CompaniesController(DataMineDbContext context) 
    { 
     _context = context;  
    } 

    // GET: Companies 
    public async Task<IActionResult> Index() 
    { 
     return View(await _context.Company.ToListAsync()); //this works 
    } 
} 

public class OrdersController : Controller 
{ 
    private readonly DataMineDbContext _context; 

    public OrdersController(DataMineDbContext context) 
    { 
     _context = context;  
    } 

    // GET: Orders 
    public async Task<IActionResult> Index() 
    { 
     return View(await _context.Order.ToListAsync()); //this throws error 
     //An unhandled exception of NullReferenceException 
    } 
} 

更新:我可以在網址爲我的訂單控制器創建視圖類型,它會插入一個新的記錄到數據庫,但錯誤的重定向到「索引」

public async Task<IActionResult> Create(int id, [Bind("Color,CompanyId,Delivered,Filled,ItemName,OrderNumb,Ordered,Price,Qty,Size")] Order order) 
    { 
     order.CompanyId = id; 
     if (ModelState.IsValid) 
     { 
      _context.Add(order); 
      await _context.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 
     return View(order); 
    } 
} 

側注:我在同一臺服務器上的單獨數據庫中設置了我的個人帳戶登錄。我也可以註冊一個用戶(插入)到AspNetUsers表中,但是當我註銷並嘗試登錄時,它總是失敗。不知道這是什麼時候開始發生的,也許這些問題是同一問題的一部分;但仍然不確定爲什麼只有一個表允許查找,但它們都允許更新。同樣超出我的經驗,無論這是Visual Studio問題還是SQL Server問題。

更新:最大的評論後,我改變了我的connectionString到

"Data Source={ServerName}\{InstanceName}; Initial Catalog={DatabaseName}; Integrated Security=True; Connect Timeout=15; MultipleActiveResultSets=true;"

兩個我USERLOGIN數據庫和我appDatabase。這使我可以重新登錄爲用戶。它並沒有讓我查詢Order表。因此,我嘗試了一個新課程,即State(作爲美國所有州的名稱/代碼),然後我將這個控制器和視圖組裝起來。該查詢現在適用於公司和州,但不適用於訂單。所以我認爲這與DBSets的DataMineDbContext中的virtual關鍵字有關,因爲State沒有支撐它。但是這並沒有解決我的問題。因此,我認爲它是一個命名約定事項,並在應用程序和我的數據庫中重命名爲Order to Purchase。這並沒有幫助。

+0

和你確定訂單已在數據庫中的價值? – Usman

+0

@Usman有兩條記錄。 「我甚至有能力從SQL Server對象資源管理器到兩個表中的」查看數據「。」這也只是索引和編輯中的一個問題。如果我輸入一個創建網址,它會將我帶到視圖並保存一條新記錄。我甚至更新了代碼以顯示訂單控制器中的創建操作 – Edward

+1

檢查是否存在'MultipleActiveResultSets = true;'您的連接字符串 – Max

回答

相關問題