gpt4 book ai didi

c# - Web API 和 Entity Framework ,在哪里指定数据库连接?

转载 作者:行者123 更新时间:2023-11-30 15:20:06 25 4
gpt4 key购买 nike

我会尽可能清楚地解释这个问题。

我从两个项目开始:

项目一:数据模型


包装具有单个 DbSet 的 DbContext 的存储库类:RentalListings

此 DbContext 使用默认设置,因此当我保存更改时,它会保存到本地数据库。

项目二:控制台应用


包含一个控制台应用程序,该应用程序在运行时实例化存储库类的实例。

然后它创建多个“RentalListings”并将它们保存到存储库。


到目前为止一切顺利。运行控制台应用程序后,我检查了本地数据库 SQL 对象资源管理器,我的存储库类已成功保存到此数据库。

现在,我想要一种通过 Web API 访问此插入数据的方法。所以我补充说:

项目三:Web API

我创建了一个新的 Controller 类并添加了一个 GET 操作方法来获取所有列表。

当我运行 API 项目时,我可以点击 action 方法,它看起来像:

[HttpGet]
public IEnumerable<RentalListing> GetAllListings() {
StatsRepository repository = new StatsRepository(new StatsContext());
return repository.GetRentalListings();
}

通过正确的 URL。但是我收到以下错误返回:

Unable to complete operation. The supplied SqlConnection does not specify an initial catalog or AttachDBFileName.

现在,通过网络搜索我认为问题在于它不知道如何访问数据库???而且我应该在我的 Web API 项目的 Web.config 文件中指定一个连接字符串。

问题:

1) 我的未指定连接字符串的控制台应用程序如何使用我的存储库类创建 mdf 数据库?

2) 为什么我的 web api 项目不一样?它不能像控制台应用程序那样只使用存储库来获取数据库吗?

期待听到回复,提前致谢!

最佳答案

问:1.我的控制台应用程序(未指定连接字符串)如何使用我的存储库类创建 mdf 数据库?

A :1。这是默认设置。如果您没有在控制台应用程序上指定连接字符串,那么它会使用您的上下文类命名空间加上上下文类的名称来创建数据库。

例如

上下文类命名空间 = MyDbContextNameSpace

上下文类的名称 = MyContext

那么您的数据库名称将是这样的:MyDbContextNameSpace.MyContext

注意:如果安装了 SQL Express,则会在本地 SQL Express 实例 (.\SQLEXPRESS) 上创建数据库。如果未安装 SQL Express,则 Code First 将尝试使用 LocalDb ((localdb)\v11.0)。

您可以在这里阅读更多相关信息:Building an Initial Model & Database

Q :2. 为什么我的 web api 项目不一样?它不能像控制台应用程序那样只使用存储库来获取数据库吗?

A :2. 当您通过 Http/s 与 EF 对话时,您必须在 web.config 文件中提供连接字符串。否则 EF 不知道该怎么做。这是设计使然。

例如

MyContext.cs

public class MyContext : DbContext
{
public MyContext() : base(“name=MyContextConn”)
{
}

public DbSet<Blog> Blogs { get; set; }
}

web.config

<connectionStrings>
<add name=“MyContextConn“ connectionString=“conndetails”
providerName=“System.Data.SqlClient“ />
</connectionStrings>

关于c# - Web API 和 Entity Framework ,在哪里指定数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40879636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com