【问题标题】:InvalidOperationException: Connection string "DefaultConnection" was not foundInvalidOperationException:未找到连接字符串“DefaultConnection”
【发布时间】:2020-08-25 09:49:08
【问题描述】:

我是 Razor 的新手。

在 appsettings.json 中的条目下方创建

"DefaultConnection": "Server=(LocalDb)\\MSSQLLocalDB;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=True"

尝试在命令下运行

@{
    var _db = Database.Open("DefaultConnection");
    var selectQueryString = "SELECT * from Book";
}

给出以下错误。 InvalidOperationException:未找到连接字符串“DefaultConnection”。 var _db = Database.Open("DefaultConnection");

以下已包含在 index.cshtml 脚本中。

@using WebMatrix.Data;
@using System.Data.SqlClient

图书表确实存在于数据库中。

如果我遗漏了什么,请提出建议。

这是完整的代码

@page
@using WebMatrix.Data;
@using System.Data.SqlClient


@model BookListRazor.Pages.Databases.IndexModel

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>
<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Web Pages Demo</title>
</head>
<body>
    <h1>Hello Web Pages</h1>
    <p>The time is @DateTime.Now</p>
</body>



@{
    var db1 = Database.Open("DefaultConnection");
    var selectQueryString = "SELECT name,Database_id,Compatibility_level,collation_name FROM sys.databases ORDER BY Name";
}



<body>
    <h1>Databases</h1>
    <table>
        <tr>
            <th>name</th>
            <th>Database_id</th>
            <th>Compatibility_level</th>
            <th>collation_name</th>
        </tr>
        @foreach (var row in db1.Query(selectQueryString))
        {
            <tr>
                <td>@row.name</td>
                <td>@row.Database_id</td>
                <td>@row.Compatibility_level</td>
                <td>@row.collation_name</td>
            </tr>

        }
    </table>
</body>


</html>

【问题讨论】:

  • 在本文中entity-framework-database-first-in-asp-net-core 告诉您将连接字符串放在哪里(在 appsettings.json 中相同)以及如何通过IConfiguration.GetConnectionString 获取。您可以通过类似或相同的行为来测试您的 Database.Open 方法。

标签: asp.net sql-server asp.net-core razor entity-framework-core


【解决方案1】:

Database.Open 期待正确的连接字符串,它并没有尝试从appsettings.json 解析它。尝试以下代码通过IConfiguration解决。

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration

@{
    var db1 = Database.Open(Configuration["DefaultConnection"]);
    var selectQueryString = "SELECT name,Database_id,Compatibility_level,collation_name FROM sys.databases ORDER BY Name";
}

【讨论】:

  • 注射失败。处理请求时发生未处理的异常。 ArgumentException:值不能为 null 或空字符串。 (参数 'name') WebMatrix.Data.Database.Open(string name)
  • 请调试代码并检查ConnectionStringDefaultConnection的实际值。请检查Database.Open("Server=(LocalDb)\\MSSQLLocalDB;Database=TestDB;Trusted_Connection=True;MultipleActiveResultSets=True") 是否可以按预期工作。
  • 两者似乎都返回空值。 Database.Open(Configuration["DefaultConnection"]); Database.Open("Server=(LocalDb)\\MSSQLLocalDB;Database=Books;Trusted_Connection=True;MultipleActiveResultSets=True");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2013-04-02
  • 1970-01-01
  • 2015-10-19
相关资源
最近更新 更多