ASP.NET MVC——CodeFirst开发模式

    Entity Framework框架提供了几种开发模式,好比Database First,Model First,Code First。Database First是最老也是应用得最普遍的一种设计方式。Database First这种方式的设计高度依赖于数据库中表的结构,根据表及表间的关系来建立模型。若是后期需求有所变动或者功能有很大变化的话,须要涉及到更改数据库所付出的代价将会很大,由于以前编写好的代码将再也不适用于新的表,咱们必需重构以更改代码中的逻辑以适应更改以后的表。Model First是建立ADO.NET实体对象以及它们之间的关系,而后再指定到数据库的映射。这个实体对象即为Model。数据库

    咱们今天要讲的是Code First(代码先行)。它思想就是先定义模型中的类,再经过这些类生成数据库。这种开发模式适合于全新的项目,它使得咱们能够以代码为核心进行设计而不是先构造数据库。服务器

    接下来我就以一个简单的例子来介绍这种开发模式。咱们的需求是两个表,博客表和评论表。一个博客对应多个评论,一个评论对应一个博客。这是一对多关系。咱们先新建一个ASP.NET MVC项目,并用NuGet安装EntityFramework。而后创建两个Model。框架

    public class Blog
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public DateTime Time { get; set; }
        public string Summary { get; set; }
        public string Content { get; set; }

        public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>();
    }
    public class Comment
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public string VisitorName { get; set; }
        public string Email { get; set; }
        public DateTime Time { get; set; }
        public string Content { get; set; }

        [ForeignKey("Blog")]
        public Guid BlogId { get; set; }
        public virtual Blog Blog { get; set; }
    }

    接下来咱们建立数据上下文。新建一个文件夹叫Context,并在其中新建类,代码以下:ide

    public class EFDbContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Comment> Comments { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();  //去除“设置表名为复数”这条约定
        }
    }

    接着咱们在Web.config中来配置数据库,咱们使用轻量级的LocalDB。在Web.config中的<configuration>节点中加入以下配置ui

  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blog;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

    接下来,咱们新建一个控制器,选择“包含视图的MVC5控制器(使用Entity Framework)”,由于咱们的重点是讲CodeFirst,因此咱们直接利用模板来生成控制器和视图,模型类选择Blog,数据上下文类选择EFDbContext(这里须要预先编译一下才能看到),控制器名称为HomeController,点击添加,咱们便有了具备CRUD功能的Controller和View。spa

    咱们运行项目,就能够进行CRUD操做了。而后咱们结束调试,打开服务器资源管理器,在数据链接那里就能够看到咱们利用代码生成的数据库表。设计

    最后,咱们来说讲表与表之间的关系。有三种,一对一关系,一对多关系,多对多关系。主要在导航属性里进行配置,好比前面的blog表和comment表,咱们在类里面加了这样的代码。调试

public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>(); //一个blog对应多个comment
public virtual Blog Blog { get; set; } //一个comment对应一个blog

    多对多关系咱们便须要借助第三张表来连接。code

相关文章
相关标签/搜索