2015-10-21 38 views
2

我是Visual Studio和.NET的全新產品,我正在關注this tutorial on Lynda(使用實體框架進行代碼優先開發)來創建ASP。 NET MVC應用程序,我應該能夠使用表單將Tour對象添加到數據庫。Visual Studio中的實體框架:數據庫不是用DbContext基礎構造函數創建的

我創建了一個繼承自DbContext的類MyDbContext

我已經添加了一個基類構造函數,其中需要爲此應用程序創建的數據庫的名稱,當從窗體提交信息時。我還添加了一個名爲ToursDbSet,它包含旅遊對象。

這裏是一個代碼,在MyDBContext.cs

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

    } 

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

在遊歷控制器,我創建了一個名爲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的引用。這仍然是新的,所以我對如何解決這個問題有點遺憾。

任何想法可能會出錯或從哪裏開始尋找?

+1

您可以添加您收到的異常消息嗎? –

+0

將'catch {'轉換爲'catch(Exception ex){'並在'return View();'上設置一個斷點'' - 然後您應該對實際問題有一些細節 - 目前您無法知道發生了什麼事情。 –

回答

2

的是,當您使用的DbContext的構造器帶有一個字符串參數,該參數必須是從的app.config或web.config文件形式​​連接字符串的任何 1名。例如,你的配置包含

<?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文件夾)。

相關問題