一、基本流程

建立模型→建立控制器→EF框架自动生成视图的数据库

二、基本理论

1、约定优于配置(Convention Over Configuration)

设计不好的框架通常需要多个配置文件,每一个都有许多设置。这些配置文件为每一个项目提供信息说明从URL到将类映射到数据库表的各种信息。大量包含太多参数的配置文件通常是过度复杂的应用设计的指标(代码坏味道)。本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为Sale的类,那么数据库中对应的表就会默认命名为sales。只有在偏离这一约定时,例如将该表命名为"products_sold",才需写有关这个名字的配置。

2、EF Code First
顾名思义,Code First就是代码优先,有了模型代码通过VS2013 MVC4 自带的EF框架就能够自动建库,建表,初始化数据,无需在设计器中去建库、建表,EF也遵循一定的约定,比如模型是Album,自动建表的表名也是Album,类中有ID属性,表中也自动建ID字段,并且是自动增量,EF还有关于外键的约定,EF框架对于一个从零开始的项目最合适不过了。

三、基本步骤

3.1、开发环境vs2013,新建MVC4,MusicStore项目

3.2、在Models文件夹下建立模型

    //1、专辑-模型(Album表)
public class Album
{
public int AlbumId { get; set; } //类型Id
public int GenreId { get; set; } //作者Id
public int ArtistId { get; set; } //专辑名称
public string Title { get; set; } //专辑价格
public decimal Price { get; set; } //专辑图片
public string AlbumArtUrl { get; set; } //类型对象
public virtual Genre Genre { get; set; } //作者对象
public virtual Artist Artist { get; set; }
} //2、专辑类型-模型(Genre表)
public class Genre
{
//Id
public int GenreId { get; set; } //类型名称
public string Name { get; set; } //类型描述
public string Description { get; set; } //专辑列表
public virtual List<Album> Albums { get; set; } } //3、作者-模型(Artist表)
public class Artist
{
//Id
public int ArtistId { get; set; } //姓名
public string Name { get; set; }
}

3.3、在Models文件夹下建立数据库上下文类(数据库操作相关,EF框架据此建库建表)

注意:需要引用EF和System.Data.Entity

   //数据库上下文,连接数据库
public class MusicStoreDBContext:DbContext
{
public MusicStoreDBContext()
: base("MusicStoreDBContext")
{ } public DbSet<Album> Albums { get; set; }
public DbSet<Artist> Artists { get; set; }
public DbSet<Genre> Genres { get; set; }
}

3.4、在Models文件夹下建数据初始化类

注意:这样在模型改变时就会自动再建表,初始化数据

   //数据初始化类
public class MusicStoreDbInitializer : DropCreateDatabaseAlways<MusicStoreDBContext>
{
//需重写Seed方法
protected override void Seed(MusicStoreDBContext context)
{
/*//如果这里不填写数据,默认建空表
//初始化实例添加默认数据
context.Artists.Add(new Artist { Name = "我是小小鸟" });
context.Genres.Add(new Genre { Name = "Jazz" });
context.Albums.Add(new Album
{
Artist = new Artist { Name = "Rush" },
Genre = new Genre { Name = "Rock" },
Price = 9.99m,
Title = "Caravan" });
*/
            base.Seed(context);
}
}

3.5、在Global.asax 文件中添加第四步(3.4)中新建的数据初始化类

注意:在模型改变时会自动再建表,初始化数据

        protected void Application_Start()
{
//添加第四步中新建的数据库初始化类(在模型改变时会自动再建表,初始化数据)
//其他不动,添加此处
Database.SetInitializer(new MusicStore.WebSite.Models.MusicStoreDbInitializer()); AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}

3.6、在Controllers文件下建StoreManager控制器

注意:所有的增、删、改、查代码和页面视图都是由EF框架自动生成的。

自动生成的模板如下图:

3.7、在Web.cifig文件添加数据库(sql Server)连接字符串。

四、运行程序,生成数据库(如下为对应的截图)

五、约定

因为使用了约定,你用于编写建立一个完整数据库的代码量已经降低到了最少。这些约定已经在前面的教程中使用到,或许你没有意识到你正在使用它们,包括:

  • 实体类型的复数形式被用作表名
  • 实体属性名被用作列名
  • 被命名为ID或实体名+ID的属性被用作主键。
  • 当一个属性以<导航属性名><主键属性名>时被用作外键(例如,Student实体的主键是ID,则StudentID为导航属性的外键)。你也可以使用简单的<主键属性名>(例如,Enrollment实体的主键是EnrollmentID,你可以直接使用EnrollmentID)。

你已经看到,约定可以被覆盖。例如指定表的名称不应当使用复数形式,你会看到以后如何明确标记属性作为外键属性。你将在后面的教程中了解更多有关约定及如何重写它们。

ASP.NET 使用MVC4的EF5 Code First 入门(一):创建数据库的更多相关文章

  1. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  2. ASP.NET Identity系列教程-2【Identity入门】

    https://www.cnblogs.com/r01cn/p/5177708.html13 Identity入门 Identity is a new API from Microsoft to ma ...

  3. asp.net core 使用EF7 Code First 创建数据库,同时使用命令创建数据库

    1.首先下载vs2015的Asp.Net Core(RC2)的插件工具(https://www.microsoft.com/net/core#windows)2.创建一个asp.net Core的项目 ...

  4. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序创建更复杂的数据模型

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第六篇:为ASP.NET MVC应用程序 ...

  5. ASP.net MVC5 Code First填充测试数据到数据库

    问题的产生  最近在看Adam Freeman的“Pro ASP.NET MVC5”,于是在工作机上面搭建了相应的运行环境,但是在自己的机器上面只有代码,没有数据库.记得在code first中可以新 ...

  6. 【无私分享:ASP.NET CORE 项目实战(第四章)】Code First 创建数据库和数据表

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 本章我们来介绍下Asp.net Core 使用 CodeFirst 创建数据库和表,通过 控制台 和 dotnet ef 两种 ...

  7. ASP.NET Core 中文文档 第一章 入门

    原文:Getting Started 翻译:娄宇(Lyrics) 校对:刘怡(AlexLEWIS) 1.安装 .NET Core 2.创建一个新的 .NET Core 项目: mkdir aspnet ...

  8. 实例快速上手 -ASP.NET 4.5新特性WebAPI从入门到精通

    在新出的MVC4中,增加了WebAPI,用于提供REST风格的WebService,新生成的WebAPI项目和典型的MVC项目一样,包含主要的Models.Views.Controllers等文件夹和 ...

  9. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 创建复杂数据模型

    Creating a complex data model 创建复杂数据模型 8 of 9 people found this helpful The Contoso University sampl ...

随机推荐

  1. 【淘宝客】PHPMailer-v6.0.5版 发送邮件dome

    话不多说,根据官方dome修改下,官方更新地址:https://github.com/PHPMailer/PHPMailer <?php use PHPMailer\PHPMailer\PHPM ...

  2. Java-谈谈对Java平台的理解

    问题 谈谈对 Java 平台的理解 Java是解释执行的 这句话对么 程序的编译与解释有什么区别 Java 平台的了解 Java的主要特点是两个, 编写一次到处运行 Write once, run a ...

  3. 成都Uber优步司机奖励政策(3月9日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 【LG4175】[CTSC2008]网络管理

    [LG4175][CTSC2008]网络管理 题面 洛谷 题解 感觉就和普通的整体二分差不太多啊... 树上修改就按时间添加,用树状数组维护一下即可 代码 #include<iostream&g ...

  5. Tomcat - 远程调试配置

    复制一份startup.bat,更名为“startup-debug”. 替换内容如下: call "%EXECUTABLE%" start %CMD_LINE_ARGS% 替换为 ...

  6. 在Sqlserver中生成随机数据

    百度了各种随机生成,集中摘录如下: 一.循环写入千万级测试数据 DECLARE @i int ) BEGIN INSERT INTO A_User(username,password,addtime, ...

  7. java 面向对象一

    一 基础部分 1.基本数据类型 Java的八种基本数据类型不支持面向对象的编程机制,不具备“对象”的特性:没有成员变量.方法可以调用.java之所以提供这八种基本数据类型,是为了照顾程序员的传统习惯. ...

  8. hdu1010Tempter of the Bone(迷宫dfs+剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  9. Windows运行机理——窗口句柄和消息

    Windows运行机理这系列文章都是来至于<零基础学Qt4编程>——吴迪,个人觉得写得很好,所以进行了搬运和个人加工 现在我们将消息与句柄联系起来.假如有一个窗口,且拥有该窗口的一个句柄( ...

  10. Swift使用AVAudioPlayer来调节游戏的背景音乐大小

    音乐文件的声音大小有时在做为游戏背景音乐时会过大,而如果我们只是简单应用SKAudioNode来加载音乐的话,是无法进行声音大小的调节的,因此我们必须使用更强大的AVAudioPlayer来进行声音大 ...