参考:
《ASP.NET MVC实战》 邹琼俊
20220825
介绍工具(VS,Git,Reflector),VS快捷键和使用技巧
C#语法的特性(都是语法糖)
C#2.0:
2.1 泛型:使用中括号,类似占位符,延迟确定数据类型,有泛型类方法接口委托,如List<string> slt=new List<string>();然后还可以在泛型加约束。(k:开发有经常使用)
2.2 部分类 partial关键字,(k:这个没怎么用过)
2.3 匿名方法,本质是一个委托,看到说是函数式编程
C#3.0:
3.1 自动属性,public int id {get;set;},(k:也是常用)
3.2 隐式推断类型 val关键字,根据语句推断变量的数据类型,常常配合LinQ查询的结果,一般返回ObjectQuery<>或者IQueryable<>类型的对象,想省事也能是常用类型。(k:我一直以为是泛型)
3.3 对象集合初始化器 Users user = new Users(){id=1,name="小k"};(k:曾经装过B的写法,同事都说爽,只是不知道它叫对象集合初始化器)
3.4 匿名类 var f = new {id=1,name="小k"};反编译出来是一个泛型类,有获取初始值的构造函数,私有只读字段。(k:感觉没啥用)
3.5 扩展方法 可以为一个类型添加一些方法,在增加方法时参数加上this,然后就能string s="123"; s.MyAge(2016);(k:感觉挺爽,试试)
3.6 系统内容委托 没看明白
3.7 Lambda表达式 ,已经是比较主流的写法,就是加上=>,常用就是在IEnumerable和IQueryable接口的Where<>(x=>x.id==1)(k:开始不习惯,这什么鬼,后来欲罢不能,一直在用)
3.8 Lambda缩写
3.9 SQO标准查询运算符
上面的Where<>就是这个,还有Select(),Count(),orderBy(),ThenBy(),Join(),Where(),FindAll()
3.10 LINQ
从from开始,select或者group by 结尾的IEnumerable<T>或IQueryable<T>集合,很接近SQL风格的代码,所有有LINQ IN EF
C# 4.0
4.1 可选参数和命名参数(k:也是常用,第一次看到时觉得没有更舒服了,默认值直接写在参数上,如果加多个方法类型参数回调,那就更爽)
public void Say(string name ="小k",int age=1)
{
}
4.2 Dynamic 特性(k:啥也没说),这里提了params关键字,还是很好用的,参数可以放数组这种数目可变参数了,如public void a(params int[] list),但加了不能有其他参数了。
C# 5.0
5.1 async,await关键字(k:这个也看到过,异步编程)
EF(O/R mapping)
返回IQueryable对象或IEnumerable对象(IQueryable是延迟执行,IEnumberable是直接执行放入内存)
3种开发方式:
第一种 DatabaseFirst(数据库优先)
要建edmx模型(k:想起多年前的数据实体集文件,后缀忘了,很冗余的一个组件)
SQLProfiler工具,调试时断点查看语句,选TSQL
查询语句:条件、排序、分页(skip),聚合,连接,分组
多层架构时,会多次创建EF,会容易不知道最终哪层是最新,容易脏读,用单例也不好,会丢失,采用线程对象,将EF存到HttpContext管道,实现线程唯一
第二种 ModelFirst(模型优先)
也要建edmx模型,更新模型时会先删数据表再重建,(k:我的数据不要了?不建议!!也可能是我理解错,再看看其他解释,或者第一次建新表,是比较方便吧)
第三种 CodeFirst(代码优先)
不建edmx模型,自己建实体类,用FluentAPI或者DataAnnotation配置(k:配好可以理解ORM的映射关系)
步骤:(个人理解)
1.加命名空间using System.ComponentModel.DataAnnotations;能支持13种注释,如KeyAttribute、StringLengthAttribute等
2.web.config的连接数据库字符串<add name="mvcContext"> 加providerName=“System.Data.SqlClient”,否则会报错。
3.建上下文类(就是做承上启下的类,没其他作用),加using Sysmte.Data.Entity,继承DbContext,构造函数继承:base("name=mvcContext"),DbSet<Order> ordre{get;set;}
4.建控制器,然后就自动建新表了!
db.Database.CreateIfNotExists();
5.db.SaveChanges()
再次提到EF创建对象问题。(k:就是要重视)
方法:建Base控制器,所有继承它,加using System.Runtime.Remoting.Messageing; 用get{ 调用CallContext.GetData("mvcContext"),没有就新建SetData("mvcContext",db) }