visual studio 2012建立工程实战

2014 年 3 月 24 日4860

  随着2012年8月份,微软正式推出了visual studio 2012,其中asp.net mvc4和asp.net web api也正式与广大开发者见面了。其中asp.net mvc4比之前的版本有了不少新的改进特性,而asp.net web api也可以认为是微软推出的符合REST标准的API接口,大大方便了对REST的调用。本文以及后续的系列文章将通过实际例子,介绍如何搭配使用asp.net mvc4和asp.net web api,本文要求读者有一定的asp.net mvc基础或使用asp.net的基础阅读。  步骤1 新建立工程  在本文中,使用的是visual studio 2012 RTM版本和sql server 2012。其中本文的完整代码可以在https://github.com/jcreamer898/NetTutsMvcEf 中可以下载。 然后打开vs.net 2012,在文件新建菜单中,选择如下图的新建立Internet Application。

visual studio 2012建立工程实战

步骤2 使用Entitiy Framework  在本文中,使用的是微软的Entity Framework去搭建项目的数据层。其中Entity Framework框架允许开发者先设计好对应的POJO类,然后会自动生成对应的数据库对应的表,并且能让开发者使用LINQ查询语言去查询数据库,这是十分方便的,关于Entity Framework的相关知识,请读者另行参考相关的资料学习。  我们做的这个例子,是关于一个审核的应用,把这个实体类命名为Review,编写如下的代码:  // Review.cs    public class Review  public int Id { get; set; }  [Required]  public string Content { get; set; }  [Required]  [StringLength(128)]  public string Topic { get; set; }  [Required]  public string Email { get; set; }  [Required]  public bool IsAnonymous { get; set; }  public int CategoryId { get; set; }  public virtual Category Category { get; set; }  public virtual IEnumerableComment> Comments { get; set; }  在上面的代码中,Review类有自己的id主键,而content属性则存放审核的内容,Topic属性存放的是审核的主体标题,比如一个餐厅的名称(或者任何组织的名称), IsAnonymous字段表示是否为匿名审核者。而Category类则指向目录的分类的一个实例引用,Comments也是一个代表一对多关系的评论集合。下面看下Comment类的设计,如下所示:  public class Comment  public int Id { get; set; }  [Required]  public string Content { get; set; }  [Required]  public string Email { get; set; }  [Required]  public bool IsAnonymous { get; set; }  public int ReviewId { get; set; }  public Review Review { get; set; }  可以看到,Comment类中,通过ReviewId和Review对Review类进行了外键引用。最后看下category类,如下:    public class Category  public int Id { get; set; }  [Required]  [StringLength(32)]  public string Name { get; set; }  在上面的代码中,会看到使用了[Required]的注解,规定了在数据库中这些字段是不能为空的,并且在接下来的编程中,将会用到做验证的相关工作。  为了要创建这些类的相应的数据表,需要创建一个DbContext的类,名为ReviewedContext,如下:  public class ReviewedContext : DbContext  public DbSetReview> Reviews { get; set; }  public DbSetCategory> Categories { get; set; }  public DbSetComment> Comments { get; set; }  public ReviewedContext()  Configuration.ProxyCreationEnabled = false;  在这个类中,每一个属性都对应当生成数据库表时的对应数据表。而Configuration.ProxyCreationEnabled的含义为不允许使用代理去存取对象,这样速度会更加快。  接下来,我们需要设置一个叫数据库初始器(initializer),它能确保当用户修改数据模型实体的时候,数据库中的数据表能跟随变化,否则的话,当开发者重新设计实体模型或对其进行修改后,则必须手工删除数据库中的表。目前,.net提供了一些不同类型的initializer给用户选择:  DropCreateDatabaseAlways和DropCreateDatabaseIfModelChanges,我们这里选择后者,就是当模型变化时,自动通知数据库进行变更。  DropCreateDatabaseAlways和DropCreateDatabaseIfModelChanges都有个不好的地方就是当模型变化时,会自动删除数据表并且数据。幸亏EF Code First框架提供了第三种方案:Migrations。这个新的特性将能在当数据模型变化时,并不会删除数据。  下面是初始器的代码:  public class ReviewedContextInitializer  DropCreateDatabaseIfModelChangesReviewedContext>  protected override void Seed(ReviewedContext context)  其中ReviewedContextInitializer重写了Seed方法,这能让我们往数据库中增加一些测试数据。现在,我们打开Global.asx文件,并且往Application_Start方法中增加如下代码:  Database.SetInitializer(new ReviewedContextInitializer());

0 0