我需要關於在我的程序中可能出現問題的建議。我收到以下錯誤: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。這並沒有幫助。
和你確定訂單已在數據庫中的價值? – Usman
@Usman有兩條記錄。 「我甚至有能力從SQL Server對象資源管理器到兩個表中的」查看數據「。」這也只是索引和編輯中的一個問題。如果我輸入一個創建網址,它會將我帶到視圖並保存一條新記錄。我甚至更新了代碼以顯示訂單控制器中的創建操作 – Edward
檢查是否存在'MultipleActiveResultSets = true;'您的連接字符串 – Max