MVC Code First (代码优先)
首先配置web.config
<connectionStrings>
<add name="BookDbContext" connectionString=" Data Source=.\SQLEXPRESS;Initial Catalog=sales;Persist Security Info=True;Integrated Security=SSPI;"
providerName="System.Data.SqlClient" />
</connectionStrings>
然后在Model里加入一个Book 类和一个BookDbContext类
Book类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace MvcApplication3.Models
{
public class Book
{
public int BookID { get; set; }
public string BookName { get; set; }
public string Author { get; set; }
public string Publisher { get; set; }
public decimal Price { get; set; }
public string Remark { get; set; }
}
}
BookDbContext类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity; namespace MvcApplication3.Models
{
/// <summary>
/// BookDbContext代表EF中Book在数据库中的上下文对象,通过DbSet<Book>使实体类与数据库关联起来。Books属性表示数据库中的数据集实体,用来处理数据的存取与更新。BookDbContext派生自DbContext,须要加入System.Data.Entity的引用。
/// </summary>
public class BookDbContext:DbContext
{
/// <summary>
/// 表示用于运行创建、读取、更新和删除操作的类型化实体集。 DbSet 不是公共可构造的。仅仅能从 System.Data.Entity.DbContext实例创建。
/// </summary>
public DbSet<Book> Books { get; set; }
}
}
加入一个Book控制器
要了解FormCollection请參考:FormCollection传值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication3.Models; namespace MvcApplication3.Controllers
{
public class BookController : Controller
{
//
// GET: /Book/ BookDbContext db = new BookDbContext(); /// <summary>
/// //查询出全部的Book对象,组成一个Books,让它展示在页面首页
/// </summary>
/// <returns></returns>
public ActionResult Index()
{
//这是一个简单的Linq查询,在对数据库进行操作时。EF会检查当前的数据连接指定的数据库是否被创建,假设没有则有EF负责依据实体模型类创建数据库、数据表;假设存在,EF会将查询条件加入到Sql查询语句,再将Sql语句发送到数据库进行数据读取。在完毕数据读取后,将数据转换为实体对象集合。 EF对数据库的操作大致如此
var books = from b in db.Books
select b;
return View(books.ToList());
} [HttpGet]
public ActionResult Create()
{
return View();
} [HttpPost]
public ActionResult Create(Book book)
{ //MVC验证中全部属性验证成功ModelState.IsValid等于true,仅仅要有一个验证不成功ModelState.IsValid就等于false 所以我们能够通过该属性来推断数据的有效性,但有时在数据验证时有时我们不须要验证全部的数据,比方登录时仅仅须要验证username及password格式是否输入正确就可以。使用下面方法能够排除要验证的字段:ModelState.Remove("Email");不验证Email。这样Email这个字段就不会被验证了,Email验证不通过ModelState.IsValid的值仍然是true if (ModelState.IsValid)
{
db.Books.Add(book);
db.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(book);
} }
[HttpGet]
public ActionResult Delete(int id)
{
var data = from DataItem in db.Books
where DataItem.BookID == id
select DataItem;
ViewData.Model = data.Single();
return View();
} [HttpPost]
public ActionResult Delete(int id, FormCollection c) //事实上这的FormCollection c 换成 int a=5 或者 int a=6 都是能够的。仅仅要保证这个Delete方法与上面的Delete方法參数不同就能够了。 事实上也就是保证两个方法构成重载
{
//Find()是返回满足条件的第一个元素,假设没有该元素,则返回null。 Book book = db.Books.Find(id); //也能够写成:Book book=db.Books.FirstOrDefault(d=>d.BookID==id)
db.Books.Remove(book);
db.SaveChanges(); return RedirectToAction("Index"); } public ActionResult Edit(int id)
{
//var data = from dataitem in db.Books
// where dataitem.BookID == id
// select dataitem;
//ViewData.Model = data.Single();
//return View(); //Find()是返回满足条件的第一个元素(即:Books中 BookID的的值为id的Book),假设没有该元素。则返回null。
Book book = db.Books.Find(id);
if (book == null)
{
return RedirectToAction("Index");
}
return View(book); }
[HttpPost]
public ActionResult Edit(Book newbook)
{
try
{
Book oldbook = db.Books.Find(newbook.BookID); //使用来自控制器的当前值提供程序的值更新指定的模型实例
UpdateModel(oldbook); //将在此上下文中所做的全部更改保存到基础数据库。 db.SaveChanges();
return RedirectToAction("Index"); }
catch (Exception ex)
{
//AddModelError:将指定的错误消息加入到与指定键关联的模型状态字典的错误集合中。
ModelState.AddModelError("", "改动失败。请查看具体错误信息" + ex.Message + ex.StackTrace);
}
return View(newbook);
} public ActionResult Details(int id)
{
//Find()是返回满足条件的第一个元素(即:Books中 BookID的的值为id的Book),假设没有该元素,则返回null。
Book book = db.Books.Find(id);
if (book == null)
{
return RedirectToAction("Index");
}
return View(book);
} }
}
view
Index 视图 首页
@model IEnumerable<MvcApplication3.Models.Book>
@{
ViewBag.Title = "图书列表-MvcBook";
}
<h2>
图书列表</h2>
<p>
@Html.ActionLink("添加图书", "Create")
</p>
<table>
<tr>
<th>图书名称</th><th>作者</th><th>出版社</th><th>价格</th><th>备注</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.BookName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Author)
</td>
<td>
@Html.DisplayFor(modelItem => item.Publisher)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.Remark)
</td>
<td>
@Html.ActionLink("编辑", "Edit", new { id = item.BookID }) |
@Html.ActionLink("具体", "Details", new { id = item.BookID }) |
@Html.ActionLink("删除", "Delete", new { id = item.BookID })
</td>
</tr>
}
</table>
Create
@model MvcApplication3.Models.Book @{
ViewBag.Title = "Create";
} <h2>添加</h2> @using (Html.BeginForm()) {
@Html.ValidationSummary(true) <fieldset>
<legend>Book</legend> <div class="editor-label">
@Html.LabelFor(model => model.BookName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BookName)
@Html.ValidationMessageFor(model => model.BookName)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Author)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Author)
@Html.ValidationMessageFor(model => model.Author)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Publisher)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Publisher)
@Html.ValidationMessageFor(model => model.Publisher)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Remark)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Remark)
@Html.ValidationMessageFor(model => model.Remark)
</div> <p>
<input type="submit" value="添加" />
</p>
</fieldset>
} <div>
@Html.ActionLink("跳转到首页", "Index")
</div> @section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Delete
@model MvcApplication3.Models.Book @{
ViewBag.Title = "Delete";
} <h2>Delete</h2> <h3>Are you sure you want to delete this?</h3>
<fieldset>
<legend>Book</legend> <table>
<tr><th>图书名称:</th><th>@Html.DisplayFor(model => model.BookName)</th></tr>
<tr><th>作者:</th><th>@Html.DisplayFor(model => model.Author)</th></tr>
<tr><th>出版社:</th><th>@Html.DisplayFor(model => model.Publisher)</th></tr>
<tr><th>价格:</th><th>@Html.DisplayFor(model => model.Price)</th></tr>
<tr><th>备注</th><th>@Html.DisplayFor(model => model.Remark)</th></tr>
</table> </fieldset>
@using (Html.BeginForm()) {
<p>
<input type="submit" value="删除" /> |
@Html.ActionLink("跳转到首页", "Index")
</p>
}
Edit
@model MvcApplication3.Models.Book @{
ViewBag.Title = "Edit";
} <h2>编辑</h2> @using (Html.BeginForm()) {
@Html.ValidationSummary(true) <fieldset>
<legend>Book</legend> @Html.HiddenFor(model => model.BookID) <div class="editor-label">
@Html.LabelFor(model => model.BookName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BookName)
@Html.ValidationMessageFor(model => model.BookName)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Author)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Author)
@Html.ValidationMessageFor(model => model.Author)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Publisher)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Publisher)
@Html.ValidationMessageFor(model => model.Publisher)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div> <div class="editor-label">
@Html.LabelFor(model => model.Remark)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Remark)
@Html.ValidationMessageFor(model => model.Remark)
</div> <p>
<input type="submit" value="保存" />
</p>
</fieldset>
} <div>
@Html.ActionLink("跳转到首页", "Index")
</div> @section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Details
@model MvcApplication3.Models.Book @{
ViewBag.Title = "Details";
} <h2>Details</h2> <fieldset>
<legend>Book</legend>
<table>
<tr><th>图书名称:</th><th>@Html.DisplayFor(model => model.BookName)</th></tr>
<tr><th>作者:</th><th>@Html.DisplayFor(model => model.Author)</th></tr>
<tr><th>出版社:</th><th>@Html.DisplayFor(model => model.Publisher)</th></tr>
<tr><th>价格:</th><th>@Html.DisplayFor(model => model.Price)</th></tr>
<tr><th>备注</th><th>@Html.DisplayFor(model => model.Remark)</th></tr>
</table>
</fieldset>
<p>
@Html.ActionLink("编辑", "Edit", new { id=Model.BookID }) |
@Html.ActionLink("跳转到首页", "Index")
</p>
版权声明:本文博主原创文章。博客,未经同意不得转载。
MVC Code First (代码优先)的更多相关文章
- EF之Code First代码优先
1.前言 通过英文可知,表示的是代码优先,一般创建EF都是先创建数据库,创建根据数据库的EF实体模型,而code - first 则是反过来!... 2.代码实战 我们这次创建的不是原来的数据库EF设 ...
- MVC中EF代码优先问题
在练习Mvc项目时,提示如下数据库错误: The model backing the 'EFDbContext' context has changed since the database was ...
- 结合实体框架(代码优先)、工作单元测试、Web API、ASP. net等,以存储库设计模式开发示例项目。NET MVC 5和引导
介绍 这篇文章将帮助你理解在库模式.实体框架.Web API.SQL Server 2012.ASP中的工作单元测试的帮助下设计一个项目.净MVC应用程序.我们正在开发一个图书实体和作者专用的样例图书 ...
- 代码优先-Code First
非常有用的两篇文章 MSDN:Code First 迁移 博客园:CodeFirst数据迁移(不丢失数据库原有数据) EF有三种开发模式:Model First,Database First 和 Co ...
- C# ORM—Entity Framework 之Code first(代码优先)(二)
一.Entity Framework Code first(代码优先)使用过程 1.1Entity Framework 代码优先简介 不得不提Entity Framework Code First这个 ...
- 七:mvc使用CodeFirst(代码优先)创建数据库
1. 理解EF CodeFirst模式特点 2. 使用CodeFirst模式生成数据库 1. CodeFirst模式(代码优先) Code First是Entity Framework提供的一种新的编 ...
- EF Code First 使用 代码优先迁移(三)
迁移到特定版本(包括降级) 到目前为止,我们一直升级到最新的迁移,但有时您可能需要升级/降级到特定的迁移. 这是目前我数据库中的表:有四个表,我降级到addEndTime这个版本(这个版本是没有gra ...
- 从实体框架核心开始:构建一个ASP。NET Core应用程序与Web API和代码优先开发
下载StudentApplication.Web.zip - 599.5 KB 下载StudentApplication.API.zip - 11.5 KB 介绍 在上一篇文章中,我们了解了实体框架的 ...
- 使用Entity Framework 4进行代码优先开发
[原文地址]Code-First Development with Entity Framework 4 .NET 4随带发布了一个改进版的Entity Framework(EF)- 一个位于Sy ...
随机推荐
- Twitter僵尸帐号厂商雇佣中国员工专填验证码_Web2.0 - Microblogging 微博_cnBeta.COM
Twitter僵尸帐号厂商雇佣中国员工专填验证码_Web2.0 - Microblogging 微博_cnBeta.COM Twitter僵尸帐号厂商雇佣中国员工专填验证码
- 【CSS3】transform-origin原点旋转
忙乱, 点 -moz-transform-origin: 0 0; -webkit-transform-origin:0 0; -o-transform-origin:0 0; 以右上角给原点 -mo ...
- DOM的event对象的属性和方法
属性/方法 类型 是否可读写 描写叙述 altKey Boolean 读写 指示是否按下alt键 bubbles Boolean 读 指示事件是否冒泡 button Intrger 读写 鼠标事件发生 ...
- iOS_UIButton 简单操作
UIButton 风格 typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTypeCustom = 0, // no button type UIB ...
- 【Java 它 JVM】对象的创建过程
虚拟机会new 指令: 1.检查指令的参数可在对类的符号引用的恒定饮食定位,并检查是否已装上代表这个类的符号引用.分析和初始化.假设没有.您必须运行相应的类加载过程. 2.类加载通过审查,虚拟机将分配 ...
- BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)
KPI Accepts: 517 Submissions: 2185 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- 利用SVNKit进行版本库的树的导出
public List searchByTree(String userName,String passwd,String SVNServerUrl,String dirUrl){ //这里有点像 s ...
- 控制台打印Hibernate的SQL语句显示绑定参数值
问题? 使用Hibernate提供的show_sql内置属性true只能输出类似于下面的SQL语句:Hibernate: insert into user(name,password) value ...
- 共同发展一个以上的开发者账户多台电脑 证书 p12 型材 进出口
1:导出相应的开发人员证书的配置文件. 2:依据相应的app id 创建配置文件. 3:打开钥匙串,把你的公布证书导出p12文件. 4:用开发人员账号导出developerprofile文件. 5:把 ...
- Eclipse 快捷键整理
Alt+/:代码提示Ctrl+/:注释/取消注释Ctrl+D:删除光标所在行Ctrl+K:将光标停留在变量上,按Ctrl+K键可以查找到下一个同样的变量Shift+Ctrl+K:和Ctrl+K查找的方 ...