1. 程式人生 > >ASP.NET Core MVC 和 Visual Studio入門(五) 使用 SQL Server LocalDB

ASP.NET Core MVC 和 Visual Studio入門(五) 使用 SQL Server LocalDB

ASP.NET Core MVC 和 Visual Studio入門(五)   使用 SQL Server LocalDB

Rick Anderson

 

 

MvcMovieContext物件操縱連線到資料庫並對映電影物件到資料庫記錄的任務,資料庫上下文被註冊到Startup.cs檔案中的ConfigureServices 方法內的 Dependency Injection(依賴項注入器) 容器中。


public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddDbContext<MvcMovieContext>(options =>


ASP.NET Core 配置 系統讀該連線字串,對於本地開發,它從appsettings.json檔案中得到連線字串。


JavaScript

"ConnectionStrings": {
  "MvcMovieContext": "Server=(localdb)\\mssqllocaldb;Database=MvcMovieContext-20613a4b-deb5-4145-b6cc-a5fd19afda13;Trusted_Connection=True;MultipleActiveResultSets=true"
}

當部署該應用到一個測試或產品伺服器時,可使用環境變數或其它方法設定連線字串到一個真實的SQL伺服器。更多見

配置


1.SQL Server Express LocalDB

 

LocalDB是專用於程式開發的SQL Server Express 資料庫引擎的輕量級版本,LocalDB可在需要時隨時啟動並運行於使用者模式,所以不存在複雜的配置。預設地,LocalDB資料庫在C:/Users/<user再選目錄內建立“*。mdf”檔案。

  • 從View選單,開啟SQL Server Object Explorer (SSOX).

  • 右擊該 Movie 表再選 View Designer
  •  

 


注意緊鄰於ID的鑰匙圖示,預設地,EF將生成一個命名為ID的作為主鍵的屬性。

 

  • 右擊Movie 表 再選 View Data


 

 

2.資料庫播種

在Models資料夾建立一個為SeedData的類,用下面的內容代替產生了的程式碼。


using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Linq;

namespace MvcMovie.Models
{
    public static class SeedData
    {
        public static void Initialize(IServiceProvider serviceProvider)
        {
            using (var context = new MvcMovieContext(
                serviceProvider.GetRequiredService<DbContextOptions<MvcMovieContext>>()))
            {
                // Look for any movies.
                if (context.Movie.Any())
                {
                    return;   // DB has been seeded
                }

                context.Movie.AddRange(
                     new Movie
                     {
                         Title = "When Harry Met Sally",
                         ReleaseDate = DateTime.Parse("1989-1-11"),
                         Genre = "Romantic Comedy",
                         Price = 7.99M
                     },

                     new Movie
                     {
                         Title = "Ghostbusters ",
                         ReleaseDate = DateTime.Parse("1984-3-13"),
                         Genre = "Comedy",
                         Price = 8.99M
                     },

                     new Movie
                     {
                         Title = "Ghostbusters 2",
                         ReleaseDate = DateTime.Parse("1986-2-23"),
                         Genre = "Comedy",
                         Price = 9.99M
                     },

                   new Movie
                   {
                       Title = "Rio Bravo",
                       ReleaseDate = DateTime.Parse("1959-4-15"),
                       Genre = "Western",
                       Price = 3.99M
                   }
                );
                context.SaveChanges();
            }
        }
    }
}


注意如果在資料庫中已經有了電影記錄,則播種初始化器返回。

 


if (context.Movie.Any())
{
    return;   // DB has been seeded.
}



在Startup.cs檔案的Config方法的最後新增播種初始化器:

 


         

app.UseStaticFiles();
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

            SeedData.Initialize(app.ApplicationServices);
        }
    }
}


測試應用

  • 在資料庫中刪除所有記錄,這可通過瀏覽器中的delete連結或SQL Server 物件瀏覽器(SSOX)來實現。
  • 強制應用初始化(呼叫Startup類中的該方法)使播種方法執行。要強制初始化,必須中止並重啟IIS Express,可通過下列方法中的任一種實現:
    • 在通知區右擊IIS Express系統托盤圖示並點選Exit或Stop Site.


    • 如果正用非除錯模式執行VS,按F5以運行於除錯模式。
    • 如果正執行VS於除錯模式,停止偵錯程式並按F5.

 

 

 

應用顯示播種了的資料


 

原文