三 ASP.NET MVC+Entity Framework 创建数据库

时间:2022-09-22 00:28:01

首先介绍一下Entity Framework(个人使用的方式,我没有深入研究),Entity
Framework后面简称EF,EF对象关系解决方案,让程序设计者专心于程序设计,
简单的说,就是将数据对象模型转化成应用程序对象,然后应用程序对象的增删
改对应数据对象模型的增删改,中间转换成SQL语句,从而实现数据库操作。

下面我们开始实战


一,web.config 配置数据库连接

<connectionStrings>
<add name="BlogApp" connectionString="Data Source=MFY-PC\MSSQLSERVER2012;Initial Catalog=BlogApp;User ID=sa;Password=12345678" providerName="System.Data.SqlClient" />
</connectionStrings>

二,创建数据库上下文

1.首先添加EF包

三 ASP.NET MVC+Entity Framework 创建数据库

2.创建数据库上下文

三 ASP.NET MVC+Entity Framework 创建数据库

  public BlogContext() : base("BlogApp")
{

}

基类构造函数参数就是web.config配置的节点名称

三.添加数据表对应的程序实体模型

1例如我们添加一张分类表

三 ASP.NET MVC+Entity Framework 创建数据库

  public class Category
{
/// <summary>
/// 编号
/// </summary>
public int Id
{
get;
set;
}

/// <summary>
/// 分类名称
/// </summary>
public string Name
{
get;
set;
}

/// <summary>
/// 分类显示图标
/// </summary>
public string IconPath
{
get;
set;
}
}

我们只是简单的添加了一个类型,并没有看到主键,也没有看到字段的长度表示?

2.给实体类添加数据库配置(方法有多种)

三 ASP.NET MVC+Entity Framework 创建数据库

   public class CategoryConfiguration:EntityTypeConfiguration<Category>
{
public CategoryConfiguration()
{
this.ToTable("Category");
this.HasKey(x => x.Id);
}
}

this.ToTable(“Category”);设置数据库表实体Category.cs对应数据库的表名称是Category
this.HasKey(x => x.Id);设置数据库实体Category.cs对应数据库主键为Id.

四.给数据库上下文添加Category 实体集合

  public class BlogContext : DbContext
{

public BlogContext() : base("BlogApp")
{

}

public IDbSet<Category> Categorys
{
get;
set;
}


}

Categorys集合负责对表Category的存取。

疑问

上面虽然讲了数据库模型和程序设计模型的对应关系,
但是程序到底是怎么创建数据库,并且怎么创建数据库表,
项目在怎么调用BlogContext,怎么调用CategoryConfiguration,

五,BlogContext添加CategoryConfiguration

  public class BlogContext : DbContext
{

public BlogContext() : base("BlogApp")
{

}

public IDbSet<Category> Categorys
{
get;
set;
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new CategoryConfiguration());
}


}
}

OnModelCreating是在BlogContext重载,
那么现在解决了怎么调用CategoryConfiguration的问题,
那么到底怎么调用BlogContext,我们自己手动调用测试一下。

六.HomeControl添加ReadCategory动作

   public ActionResult ReadCategory()
{
var dbContext = new BlogContext();
var mdoels = dbContext.Categorys.ToList();
return View(mdoels);
}

七.ReadCategory 添加对应的视图。

三 ASP.NET MVC+Entity Framework 创建数据库

@model IEnumerable<BlogApp.Entity.Category>

@{
ViewBag.Title = "ReadCategory";
}

<h2>ReadCategory</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.IconPath)
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.IconPath)
</td>
</tr>
}

</table>

八.运行程序,测试是否创建数据库

三 ASP.NET MVC+Entity Framework 创建数据库

三 ASP.NET MVC+Entity Framework 创建数据库

从上图可以看到创建了BlogApp数据库,数据库包含Category表。
所有只要调用了BlogContext的集合,才会创建数据库,
如果没有BlogContext实例,调用BlogContext实体集合,
是不会创建数据库,今天我们的数据库创建讲到现在就完了,

源码下载