實體框架7與.Net 5 MVC 6中的現有數據庫


嗨,我在使用Entity Framework 7 MVC 6中從現有數據庫中提取數據時遇到了一些問題。(我已在此處發布了項目代碼)。我已使用正確的連接字符串設置appsettings.json:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

我有我的自定義上下文:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

兩個Poco課程:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

我正在startup.cs中設置服務

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

我的用戶控制器:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

當我導航到用戶/索引頁面時,我在列表行上不斷收到以下錯誤:

$ exception {“對象引用未設置為對象的實例。”} System.NullReferenceException

由於某種原因,它不是從數據庫中提取信息。我在Microsoft SQLServer 2014中創建它。並且users表中有數據。我錯過了一步還是我試圖以錯誤的方式訪問數據?

一般承認的答案

主要問題可以通過使用來解決

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

代替

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

它可以使用

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

但是必須刪除構造函數public UsersController(DatabaseContext context) 。不推薦最後一種方式,因為RC2第二種方式掉線了。看公告

上述更改修復了您遇到的第一個問題,但您使用的數據庫和測試數據又產生了一個問題,因為您的UsersCustomers表的Updated字段包含NULL值。因此你必須使用

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

代替

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

我推薦你的方式是使用推薦

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

您可以在主project.json存在的同一目錄中執行(在src\JenSolo )。我將命令的一部分包裹在新行上以便更好地閱讀。一個人應該把所有事情放在一個原因上。上面的命令將創建UsersCustomers類,而不是[Table("Users")]User[Table("Customers")]Customer ,但您可以使用該代碼作為基礎,並在以後手動進行所有必需的修改。

更新:在我看來,以下命令更好地對應於腳手架類的生成:

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

因為您在主項目JenSolo中使用類庫Bestro。您應該從命令行執行上述命令,並將文件夾...\src\JenSolo作為當前目錄。它將在類庫項目(Bestro)中創建Model文件夾。該Model文件夾將包含許多*.cs文件:一個文件每一個數據庫表和一個額外的文件DemoContext.cs ,其中包含的類DemoContext衍生DbContextDemo是數據庫,您使用的名稱)。您應該從DemoContext.cs刪除OnConfiguring函數,以便能夠通過配置連接字符串

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

在主項目JenSoloStartup.csConfigureServices中。

更新:從.NET Core RC2開始,應該使用dotnet ef dbcontext scaffold而不是dnx ef dbcontext scaffold





許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因