欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

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

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).

  • image.png



  • 右击该 Movie 表再选 View Designer

  •  image.png

  • image.png

注意紧邻于ID的钥匙图标,缺省地,EF将生成一个命名为ID的作为主键的属性。

 

  • 右击Movie 表 再选 View Data

image.png

image.png


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.

 

 

 

应用显示播种了的数据


 


原文


来自  http://www.voidcn.com/article/p-dslnmova-bqb.html





普通分类: