初识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”等。 运行 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


