[英]Unit testing with database created by Entity Framework with Effort and dbContext
[英]Entity Framework in Visual Studio: database is not created with DbContext base constructor
我是 Visual Studio 和 .NET 的新手,我正在按照Lynda (使用實體框架的代碼優先開發) 教程創建一個 ASP.NET MVC 應用程序,我應該能夠將 Tour 對象添加到使用表單的數據庫。
我創建了一個類MyDbContext
是繼承DbContext
。
我添加了一個基類構造函數,其中包含從表單提交信息時需要為此應用創建的數據庫的名稱。 我還添加了一個名為Tours
的DbSet
,用於保存游覽對象。
這是MyDBContext.cs中的代碼:
public class MyDBContext : DbContext
{
public MyDBContext() : base("ExploreCalifornia")
{
}
public DbSet<Tour> Tours { get; set; }
}
在 Tour Controller 中,我創建了一個名為db
的MyDbContext
實例:
private MyDBContext db = new MyDBContext();
我有一個Create
頁面,其中包含用於添加新游覽的表單,這里是此頁面的 POST 路由:
[HttpPost]
public ActionResult Create(Tour tour)
{
try
{
db.Tours.Add(tour);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
在調試器之后,當我嘗試添加新的游覽時,它會跳過SaveChanges
行並直接進入 catch 塊。 沒有創建任何數據庫,並且在解決方案資源管理器中的 App_Data 下沒有任何顯示。
該教程提到將使用 SQL Server Express LocalDB 創建數據庫,但我在服務器資源管理器中沒有看到對 LocalDB 的任何引用。 這仍然是新的,所以我對如何解決這個問題有點迷茫。
關於可能出現什么問題的任何想法,或者從哪里開始尋找?
事實是,當您將 DbContext 的構造函數與字符串參數一起使用時,該參數必須是 1. 來自 app.config 或 web.config 的連接字符串的名稱,格式為name=MyConnectionString
。 例如,您的配置包含
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="MyConnectionString" connectionString="your str here" />
</connectionStrings>
</configuration>
你像這樣聲明你的上下文
public class MyDBContext : DbContext
{
public MyDBContext() : base("name=MyConnectionString")
{
}
public DbSet<Tour> Tours { get; set; }
}
或 2. 直接連接字符串,像這樣
public class MyDBContext : DbContext
{
public MyDBContext() : base("Server=(local), Database=MyDBName, User=blah-blah...")
{
}
public DbSet<Tour> Tours { get; set; }
}
請注意,如果您使用配置文件,它必須在您的 AppDomain 目錄中(對於 exe,它是它的文件夾;對於網站,它是站點的 bin 文件夾)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.