初识ASP.NET Mvc5+EF7的奇妙之旅
using Microsoft.Framework.DependencyInjection; using System; using System.Linq; namespace MusicBank.Models { public class SampleData { public static void Initialize(IServiceProvider serviceProvider) { var context = serviceProvider.GetService<MusicContext>(); if (context.Database.EnsureCreated()) { if (!context.Artists.Any()) { var austen = context.Artists.Add( new Artist { Name = "Austen", Age = 21 }).Entity; var dickens = context.Artists.Add( new Artist { Name = "Dickens", Age = 25 }).Entity; var cervantes = context.Artists.Add( new Artist { Name = "Cervantes", Age = 27 }).Entity; context.Audio.AddRange( new Audio() { Name = "Pride", Type = 1, Artist = austen, Src = "Pride.mp3" }, new Audio() { Name = "Northanger", Type = 2, Artist = austen, Src = "Northanger.mp3" }, new Audio() { Name = "David", Type = 3, Artist = dickens, Src = "David.mp3" }, new Audio() { Name = "DonQuixote", Type = 1, Artist = cervantes, Src = "DonQuixote.mp3" } ); context.SaveChanges(); } } } } } 首先这是一个静态方法,需要传入一个“IServiceProvider”,这个可以在项目启动的时候调用。 在方法进入后我们获取到上面的“MusicContext”,然后我们进行数据库创建与数据添加工作。 if (context.Database.EnsureCreated()) 这句主要用于判断是否需要进行数据库创建,如果是将进行创建,同时返回true,而后我们判断是否具有数据,如果数据库表为空,那么我们添加一些默认数据。 配置文件 config.json 在项目根目录添加文件:“config.json”在其中配置数据库链接字段如下: { "Data": { "MusicConnection": { "ConnectionString": "Server=(localdb)mssqllocaldb;Database=MusicBank-Database;Trusted_Connection=True;MultipleActiveResultSets=true" } } } 启动配置Startup.cs 在项目启动的时候将会调用 Startup.cs 中的相关方法进行数据的初始化操作。 在这里我们需要做三件事儿: 获取到配置config.json,在构造函数中完成 using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.Data.Entity; using Microsoft.Dnx.Runtime; using Microsoft.Framework.Configuration; using Microsoft.Framework.DependencyInjection; using MusicBank.Models; namespace MusicBank { public class Startup { public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv) { var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath) .AddJsonFile("config.json") .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true); builder.AddEnvironmentVariables(); Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; set; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddEntityFramework() .AddSqlServer() .AddDbContext<MusicContext>(options => { options.UseSqlServer(Configuration["Data:MusicConnection:ConnectionString"]); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); app.UseMvc(); SampleData.Initialize(app.ApplicationServices); } } } 到这里我们的初始化操作基本完成了,现在来看看如何访问数据库数据了。 Controllers 首先在根目录添加文件夹 Controllers,右键-添加-新建项 在这里我就使用一个简单的WebAPI来进行数据演示了,后面会在文章中详细写写数据的渲染相关。 在文件 AudioController.cs 中,我们更改代码为: using Microsoft.AspNet.Mvc; using MusicBank.Models; using System.Collections.Generic; using System.Linq; namespace MusicBank.Controllers { [Route("api/[controller]")] public class AudioController : Controller { [FromServices] public MusicContext db { get; set; } [HttpGet] public IEnumerable<Audio> Get() { return db.Audio.ToList(); } [HttpGet("{name}")] public Audio Get(string name) { Audio audio = db.Audio.Where(a => (a.Name == name)).FirstOrDefault(); return audio; } } } 一个属性,两个方法。 在这里我们可以看见 MusicContext 属性并没有初始化,但是下面却能直接调用;这是因为我们添加了一个属性“[FromServices]”,该属性意味着服务器能自动采用注解的方式对 db 进行赋值。 下面两个方法分别返回全部的音乐列表,和根据音乐名称返回音乐相关信息。 当然在两个方法上都有“[HttpGet]”属性,该属性指定了请求类型为 Get 方式,当然也有其他几种,如:“HttpPost”“HttpPut”“HttpDelete”等。 运行 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |