簡體   English   中英

Visual Studio 中的實體框架:數據庫不是使用 DbContext 基構造函數創建的

[英]Entity Framework in Visual Studio: database is not created with DbContext base constructor

我是 Visual Studio 和 .NET 的新手,我正在按照Lynda (使用實體框架的代碼優先開發) 教程創建一個 ASP.NET MVC 應用程序,我應該能夠將 Tour 對象添加到使用表單的數據庫。

我創建了一個類MyDbContext是繼承DbContext

我添加了一個基類構造函數,其中包含從表單提交信息時需要為此應用創建的數據庫的名稱。 我還添加了一個名為ToursDbSet ,用於保存游覽對象。

這是MyDBContext.cs中的代碼:

public class MyDBContext : DbContext
{
    public MyDBContext() : base("ExploreCalifornia")
    {

    }

    public DbSet<Tour> Tours { get; set; }
}

在 Tour Controller 中,我創建了一個名為dbMyDbContext實例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM