本文主要是和大家分享ASP的奇妙之旅。NETMvc5 EF7,并了解。旅途中的NET5框架。感兴趣的朋友可以参考一下。
据说微软今年很厉害,Win10引起了大众的关注,还有最新的。NET5框架就更OK了。
最新的。NET5通过使用NuGet、Node和Bower实现了开源和跨平台。这意味着这可以直接在Mac或Linux上使用。网。
而且最新的Mvc5和EF框架都改头换面了,和之前的Mvc4项目不一样。移植的话就要复制核心代码,从头再来。
最近准备改版网站,所以试用了最新的框架。当然,由于还是预览版,所有改动都太大,所以走了很多弯路。在这里记录一下吧。
项目准备
工具:VS2015/Visual Studio代码2015
Mvc5 VS插件:最新预览版是Beta7的。
因为是Beta7,而且微软的官方文档和例子大部分都可以应用,但是有些地方也是不对的,比如EF的command。EF Beta3和Beta7差别很大,这是预览版的缺点,而且还时不时的改。
另外,我这里用的是VS2015,而不是Visual Studio代码。毕竟有更好的就用吧。
开工
新建项目
打开VS,点击文件-新建-项目-Web。
它叫MusicBank,是一家音乐商店。
来,我们喝一杯空的。让我们建立我们自己的模型。
好了,项目确立后,我们看到的是这个。
您可以看到我们的项目实际上位于Src文件夹下。除了对简单设置的引用之外,项目中没有任何内容。
环境搭配
项目是有的,但是不能直接用。我们需要建立一个环境,比如我们需要引入EF等等。
dependencies
打开文件“project.json ”,我们将依赖项部分修改为:
依赖项:{
微软。AspNet . server . IIS : 1 . 0 . 0-beta 7 ,
微软。AspNet . server . web listener : 1 . 0 . 0-beta 7 ,
微软。AspNet . static files : 1 . 0 . 0-beta 7 ,
微软。AspNet.Mvc: 6.0.0-beta7 ,
实体框架。命令: 7.0.0-beta7 ,
实体框架。SqlServer: 7.0.0-beta7 ,
微软。framework . configuration . JSON : 1 . 0 . 0-beta 7 ,
微软。framework . configuration . user secrets : 1 . 0 . 0-beta 7
},
这里增加了对Mvc,EF,配置的依赖。
Mvc主要用于控制器等操作的分析,包括WebAPI。
EF当然是数据库。
配置用于读取本地配置,方便设置。
commands
打开文件“project.json ”,我们将命令部分修改为:
命令:{
web: Microsoft。AspNet . Hosting-config Hosting . ini ,
ef: EntityFramework。命令
},
命令模块的主要功能是命令行执行,可以简化操作。例如,在实际执行中输入“ef”可以表示“EntityFramework”。命令”。
Model
好了,在这里我们首先设置文件夹模型,然后我们右键单击模型文件夹-添加-类:
Artist
使用系统;
使用系统。集合。泛型;
使用系统。ComponentModel . DataAnnotations
使用系统。component model . data annotations . schema;
命名空间MusicBank。模型
{
公共类艺术家
{
[答案]
[databasegenertedattribute(databasegenertedoption。身份)]
公共Guid Id { get设置;}
[必需]
公共字符串名称{ get设置;}
[必需]
public int Age { get设置;}
公共虚拟列表音频音频{ get设置;}
}
}
一个歌手有名字和年龄,然后有n首歌。
Audio
使用系统;
使用系统。ComponentModel . DataAnnotations
使用系统。component model . data annotations . schema;
命名空间MusicBank。模型
{
公共类音频
{
[答案]
[databasegenertedattribute(databasegenertedoption。身份)]
公共Guid Id { get设置;}
[必需]
公共字符串名称{ get设置;}
[必需]
public int类型{ get设置;}
[必需]
公共字符串Src { get设置;}
[必需]
公共Guid ArtistId { get设置;}
公共艺术家艺术家{获取设置;}
}
}
歌曲也简化了,一个名字,一个类型,一个源文件,属于某个歌唱家。
MusicContext
这个想必大家不陌生吧,用于数据库的查询等操作就全靠这个了;算是仰角指示器的精髓。
使用微软。数据。实体;
命名空间音乐银行.模型
{
公共类音乐上下文:DbContext
{
公共DbSetAudio音频{获取设置;}
公共DbSetArtist艺术家{ get设置;}
}
}
这里只需要添加两个表就好的。
SampleData
为了方便,这里我直接在创建数据库的时候就进行数据的初始化工作,添加一些默认数据。
使用微软框架。依赖性注射
使用系统;
使用系统100 . Linq
命名空间音乐银行.模型
{
公共类样本数据
{
公共静态void Initialize(IServiceProvider服务提供商)
{
定义变量上下文=服务提供商.GetServiceMusicContext();
如果(上下文数据库。EnsureCreated())
{
如果(!语境。艺术家。Any())
{
瓦尔奥斯汀=上下文。艺术家。添加(
新艺人{ Name=Austen ,年龄=21 })。实体;
var dickens=语境。艺术家。添加(
新艺人{ Name=狄更斯,年龄=25 })。实体;
定义变量塞万提斯=语境。艺术家。添加(
新艺人{ Name=塞万提斯,年龄=27 })。实体;
语境音频。添加范围(
新音频()
{
Name=Pride ,
类型=1,
艺术家=奥斯汀,
Src=Pride.mp3
},
新音频()
{
Name=诺桑觉寺,
类型=2,
艺术家=奥斯汀,
Src=Northanger.mp3
},
新音频()
{
Name=大卫,
类型=3,
艺术家=狄更斯,
Src=David.mp3
},
新音频()
{
Name=唐吉诃德,
类型=1,
艺术家=塞万提斯,
Src=唐吉诃德。 mp3
}
);
语境save changes();
}
}
}
}
}
首先这是一个静态方法,需要传入一个"
IServiceProvider
",这个可以在项目启动的时候调用。在方法进入后我们获取到上面的"
MusicContext
",然后我们进行数据库创建与数据添加工作。如果(上下文数据库。EnsureCreated())
这句主要用于判断是否需要进行数据库创建,如果是将进行创建,同时返回没错,而后我们判断是否具有数据,如果数据库表为空,那么我们添加一些默认数据。
配置文件配置。json
在项目根目录添加文件:" config.json "在其中配置数据库链接字段如下:
{
数据:{
音乐连接:{
ConnectionString ":" Server=(local db) mssqllocaldb;数据库=音乐库-数据库;trusted _ Connection=true multipleactiveresultsets=true
}
}
}
启动配置Startup.cs
在项目启动的时候将会调用Startup.cs中的相关方法进行数据的初始化操作。
在这里我们需要做三件事儿:
获取到配置配置文件,在构造函数中完成
设置数据库文件连接,在配置服务方法中完成
初始化数据库相关数据,在安装使成形方法中完成
使用微软AspNet。建设者
使用微软AspNet。主办;主持
使用微软。数据。实体;
使用微软. Dnx。运行时间
使用微软。框架。配置;
使用微软框架。依赖性注射
使用音乐银行。模特;
命名空间音乐库
{
公共类启动
{
公共启动(IHostingEnvironment env,IApplicationEnvironment appEnv)
{
var生成器=新配置生成器(appEnv .ApplicationBasePath)。AddJsonFile(config.json )。AddJsonFile($ 配置.环境.环境名称}。 json ,可选:真);
建筑商AddEnvironmentVariables();
配置=构建器. build();
}
公共IConfigurationRoot配置{获取设置;}
公共void配置服务(IServiceCollection服务)
{
服务添加MVC();
服务AddEntityFramework()。AddSqlServer()。AddDbContextMusicContext(选项=
{
选项UseSqlServer(配置[ Data:music connection:ConnectionString ]);
});
}
公共void配置(IApplicationBuilder应用程序,IHostingEnvironment环境)
{
app。UseStaticFiles();
app。use MVC();
SampleData。初始化(应用程序。应用服务);
}
}
}
至此,我们的初始化操作基本完成。现在让我们看看如何访问数据库数据。
Controllers
首先,在根目录中添加文件夹控制器,右键单击-添加-创建新项目。
这里,我将使用一个简单的WebAPI来演示数据。稍后,我将在文章中详细介绍数据渲染。
在文件AudioController.cs中,我们将代码更改为:
使用微软。AspNet . Mvc
使用音乐银行。模特;
使用系统。集合。泛型;
使用系统。Linq
命名空间MusicBank。控制器
{
[路由( API/[控制器])]
公共类AudioController:控制器
{
[来自服务]
public MusicContext db { get设置;}
[HttpGet]
public IEnumerableAudio Get()
{
返回db。audio . to list();
}
[HttpGet({name})]
公共音频获取(字符串名称)
{
音频audio=db。Audio.Where(a=(a.Name==name))。FirstOrDefault();
返回音频;
}
}
}
一个属性,两种方法。
这里我们可以看到MusicContext属性没有初始化,但是可以直接在下面调用;这是因为我们添加了一个属性“[FromServices]”,这意味着服务器可以通过注释自动为db赋值。
以下两种方法分别返回所有音乐列表,根据音乐名称返回音乐相关信息。
当然,两种方法都有“[HttpGet]”属性,指定请求类型为Get。当然还有其他几种方法,比如:“HTTP POST”、“HTTP PUT”、“HTTP DELETE”。
运行
这里有两种运行方式,分别是IIS和Web命令行。
IIS
直接这样运行,VS会打开浏览器,设置端口。
Web
还记得上面写命令行的地方吗?有这样一句台词:
web: Microsoft。AspNet . Hosting-config Hosting . ini ,
这里,我们启动的参数在“hosting.ini”文件中,我们打开hosting.ini文件。
服务器=微软。AspNet.Server.WebListener
server . URL=http://localhost:5000
你可以找到我们访问过的网址,运行后把网址复制到浏览器中运行。
运行的时候会看到这个窗口,可以看到其实就是调用dnx运行的程序。DNX是跨平台的,这意味着它可以直接在Mac上运行。
影响
可以看出,两种方法的接口调用结果都是可以的。
认识ASP的旅程。NET的MVC5EF7在这边。希望你能开始另一段精彩的ASP之旅。NET的MVC5EF7。