ASP.NET MVC02

本文总阅读量:
  1. 1. 接上篇
  2. 2. code first
  3. 3. 上下文管理:实例管理
  4. 4. 为什么用EF而不用原生的Ado.Net
  5. 5. MVC

接上篇

更新,删除可以先找出实体,然后直接更改属性保存即可,删除直接调用remove

1
2
3
4
5
6
7
var db = new luox78_成绩管理系统Entities();
var college = db.College.FirstOrDefault(m => m.Autoid == 1);
//更新
college.CollegeName = "changed";
//删除
db.College.Remove(college);
db.SaveChanges();

根据主键查询可以使用Find方法

1
var college1 = db.College.Find(1, 0);//这里College表中有两个主键

code first

https://www.cnblogs.com/lsxqw2004/archive/2015/08/07/4701979.html

上下文管理:实例管理

1
2
3
4
5
6
7
8
9
10
11
12
13
public static DbContext GetCurrentDbContext()
{
//第一次:
DbContext dbContext = HttpContext.Current.Items["DbContext"] as DbContext;

if (dbContext == null)
{
dbContext =new DbContext("");
HttpContext.Current.Items["DbContext"] = dbContext;
}

return dbContext;
}

利用HttpContext.Current.Items存入DbContext

为什么用EF而不用原生的Ado.Net

1、极大的提高开发效率:EF是微软自己的产品,跟VS开发工具集成度比较好,开发中代码都是强类型的,写代码效率非常高,自动化程度非常高,命令式的编程。

2、EF提供的模型设计器非常强大,不仅仅带来了设计数据库的革命,也附带来的自动化生成模型代码的功能也极大的提高开发和架构设计的效率

3、EF跨数据支持是ORM框架主要功能点之一,带来的是可以通过仅仅改变配置就可以做到跨数据库的能力。

4、使开发人员远离sql脚本

5、缺陷:性能差(生成sql脚本阶段),在复杂查询的时候生成的sql脚本效率不是很高。

MVC

控制器: https://luox78.github.io/2018/02/07/ASP.NET%20MVC%20%E6%8E%A7%E5%88%B6%E5%99%A8/

视图: https://luox78.github.io/2018/02/13/ASP.NET-MVC-%E8%A7%86%E5%9B%BE/

管道流程:

ISAPIRuntime.ProcessRequest()创建HttpWorkerRequest对象

HttpRuntime.ProcessRequest()创建HttpContext,包含HttpRequestHttpResponse

HttpAppicationFactory获取HttpApplication(根据Gloable文件)→ASP.NET管道流程

有关Application_Start():

1
2
3
4
5
6
7
8
9
10
public class MvcApplication : System.Web.HttpApplication
{
public string Name { get; set; }

protected void Application_Start()
{
Name = "luox78";
。。。。
}
}

关于Name有可能拿的到有可能拿不到,原因:MvcApplication创建在IIS应用程序池,有缓存的时候会返回池里面第一个,没有则创建新的

HttpAppicationFactory获取HttpApplication(根据Global文件):

  • 初始化工厂:根据Global编译到ApplicationType
  • 确保Application_Start被调用
  • 创建HttpApplication,先去缓存栈中取没有new

拓展方法使用一个技巧:

1
2
3
4
5
6
7
8
9
10
11
//通过更改命名空间实现所有的view均可以使用自己定义的htmlhelper
namespace System.Web.Mvc
{
public static class MyHelperExt
{
public static MvcHtmlString MyLabel(this HtmlHelper helper, string text)
{
return MvcHtmlString.Create($"<span>MyLabel:{text}</span>");
}
}
}