[英]Web API & Entity Framework, Where to specify Database connection?
我將盡力解釋這個問題。
我從兩個項目開始:
項目一:數據模型
包裝具有單個DbSet的DbContext的存儲庫類:RentalListings
此DbContext使用默認設置,以便在保存更改時將其保存到本地數據庫。
項目二:控制台應用程序
包含一個控制台應用程序,該控制台應用程序在運行時實例化存儲庫類的實例。
然后,它創建多個“ RentalListings”並將其保存到資源庫中。
到現在為止還挺好。 運行控制台應用程序后,我檢查了本地DB SQL對象瀏覽器,並且我的存儲庫類已成功保存到該數據庫。
現在,我想要一種通過Web API訪問此插入數據的方法。 所以我添加:
項目三:Web API
我創建了一個新的控制器類,並添加了一個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數據庫?
答:1。 默認情況下,如果您未在控制台應用程序上指定連接字符串,則它將使用您的上下文類名稱空間以及上下文類的名稱來創建數據庫。
例如
上下文類名稱空間= MyDbContextNameSpace
上下文類的名稱= MyContext
然后,您的數據庫名稱將如下所示: MyDbContextNameSpace.MyContext
。
注意:如果安裝了SQL Express,則會在本地SQL Express實例(。\\ SQLEXPRESS)上創建數據庫。 如果未安裝SQL Express,則Code First將嘗試並使用LocalDb((localdb)\\ v11.0)。
您可以在這里閱讀有關它的更多信息: 建立初始模型和數據庫
問:2。 為什么我的Web api項目無法正常工作? 難道不能像控制台應用程序一樣使用存儲庫來獲取數據庫嗎?
A2。 通過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>
DbContext
類絕對可以負責“指定連接字符串”,但是在配置文件中最常見的原因是可以為不同的配置指定不同的連接字符串。 例如,您的Web.Debug.config
連接字符串可能指向您已安裝在開發盒上的Web.Release.config
實例,而Web.Release.config
連接字符串可能指向Azure中包含的Sql實例。 <add name="DefaultConnection" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;" providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=True" providerName="System.Data.SqlClient" />
那么您將需要通過更新運行apppool的用戶來設置運行應用程序的上下文。 您可以通過更新應用程序池標識 ,然后確保Web應用程序正在使用該應用程序池來做到這一點 。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.