**《ASP.NET MVC 企业级实战》

========== ========== ==========
[作者] (中) 邹琼俊
[出版] 清华大学出版社
[版次] 2017年04月 第1版
[印次] 2019年08月 第6次 印刷
[定价] 89.00元
========== ========== ==========

【第01章】

(P021)

只有在 Lambda 有一个输入参数时,括号才是可选的,否则括号是必需的。

使用空括号指定零个输入参数。

【第02章】

(P037)

EDM 中利用特性来标识实体映射到具体数据数据库中的 TableName ,属性对应的具体表的 ColumnName ,还有主键、外键、默认值等,都用特性来标识。然后通过反射技术, 从 EF 中 edmx 元数据获取数据库表的结构的描述,再根据增删改查操作方法,就可以产生对应的 SQL 语句,然后发送给 ADO.NET 负责从数据库中读取数据,返回给我们的 EF 。

(P042)

禁用延迟的方法有 ToList() 、 FirstOrDefault() 、 Include() 等。

(P048)

IQueryable 其实继承了 IEnumerable 。

EF 不支持复杂类型 (如实体) 的直接检索,只能用简单类型,比如常用的标量类型 string 、 int 和 guid 。

【第03章】

(P083)

控制器的约定大于配置 :

  1. Controller 放到 Controllers 文件夹中,并且命名方式以 Controller 结尾;

  2. 每个 Controller 都对应 View 中的一个文件夹,文件夹的名称跟 Controller 名相同。 Controller 中的方法名都对应一个 View 视图 (非必须,但是建议这么做) 而且 View 的名字跟 Action 的名字相同;

  3. 控制器必须是非静态类,并且要实现 IController 接口;

  4. Controller 类型可以放到其他项目中;

视图的相关约定 :

  1. 所有的视图必须放到 Views 目录下;

  2. 不同控制器的视图用文件夹进行分割,每个控制器都对应一个视图目录;

  3. 一般视图名字跟控制器的 Action 相对应 (非必须) ;

  4. 多个控制器公共的视图放到 Shared 目录中;

【第04章】

(P085)

dynamic 型与 object 型的区别是在使用时它会自动根据数据类型转换,而 object 型则需要自己去强制转换。

(P087)

ViewBag 其实就是 ViewData ,只是多了一层 Dynamic 控制,可以说它是另一种访问 ViewData 的方式。理论上 ViewBag 要比 ViewData 慢一点点,但是几乎可以忽略,所以使用任何方式完全取决于个人的爱好。

(P090)

当前台的 C# 代码有多行时,如果这些代码是连续的,中间没有 HTML 代码隔断,那么只需要开头的一个 @ 符号即可;否则 HTML 代码之后被隔断的 C# 代码开头需要加上 @ 符号。

(P115)

@Html.Editor / @Html.Display 可以通过读取特性值生成 HTML 。

【第05章】

(P134)

Routing 的作用是 :

  1. 匹配传入的请求 (不匹配服务器物理文件),并将请求映射到 “控制器” 的具体操作 “Action 方法” 和 “参数” 中;

  2. 调用并执行对应控制器类的 Action 方法;

{controller} 和 {action} 是特定参数名,不能改。

(P135)

不能有两个连续的 URL 参数,参数之间必须有字符隔开。

(P141)

推荐使用 @Scripts.Render 的形式,因为它支持压缩合并和服务器缓存。

(P147)

区域路由注册优先于普通路由注册。

【第06章】

(P181)

@Html.AntiForgeryToken() 只能添加在 Html.BeginForm() 形式声明的表单中,纯 HTML 的

标签表单是不行的。

【第07章】

(P204)

一个 Session 代表一个单线程的单元操作。 ISessionFactory 是线程安全的,很多线程可以同时访问它。 ISession 不是线程安全的,代表与数据库之间的一次操作。 ISession 通过 ISessionFactory 打开,在所有的工作完成后需要将其关闭。 ISessionFactory 通常是一个线程安全的全局对象,只需要被实例化一次。

SessionFactory 的创建很占用系统资源,一般在整个应用程序中只创建一次。

(P207)

NHibernate 映射文件以 .hbm.xml 结尾。

【第09章】

(P256)

没必要花太多的时间去钻研工作中用不到的东西,因为一个人的时间和精力都是有限的,说句现实的,你学的任何东西、只有真正用到了、有了产出才能体现出价值,对企业而言尤其如此。

(P262)

WCF 是 Windows 平台上开发分布式应用最佳的实践方式。

(P270)

每个 WCF 服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间 System.ServiceModel 。

(P271)

ServiceHost 类型 : 当 IIS 和 WAS 作为宿主程序时, IIS 和 WAS 会自动创建 ServiceHost 类型。

(P279)

使用 js 的异步操作不支持跨域访问,也就是说 js 异步调用操作必须和 WebAPI 在同一个站点上。

(P307)

在进行技术选型的时候,不要追求最新的,而应当选择既能满足需求又运行非常稳定的。因为最新的技术不但相关资料少,而且也没有经过项目的实际验证,学习成本很高,风险较大。

【第10章】

(P325)

搜索引擎一般不会执行 JS 、不会发 Post 请求、不会提交表单。

(P327)

SQL Server 的专业版才支持全文检索功能。

(P333)

永远不要对 bin / debug 下的东西做直接修改,而是要改 “源文件” 。

(P356)

尽量不要用 JavaScriptSerializer ,因为性能差,完全可以用 Newtonsoft.Json 来代替。

【第11章】

(P366)

框架则是各种设计模式的集合。设计模式是解决某一类问题的方法。

【第12章】

(P434)

在清楚需求之后,我们首先要做的就是技术选型。

(P435)

使用 EF Database First 方式需要注意的是 : 所有表必须设置主键,表和表之间的关系必须通过主外键进行关联。

(P439)

新建解决方案文件夹可以打包一些项目,让整个项目变得更清晰。

(P459)

DbContext 默认支持事务,当实例化一个新的 DbContext 对象时会创建一个新的事务,当调用 SaveChanges 方法时事务会提交。

(P465)

jQuery EasyUI 是一组基于 jQuery 的 UI 插件集合,而 jQuery EasyUI 的目标就是帮助 Web 开发者更轻松地打造出功能丰富并且美观的 UI 界面。开发者不需要编写复杂的 JavaScript ,也不需要对 CSS 样式有深入的了解,需要了解的只有一些简单的 HTML 标签。
**