2018-6-16 周报 (第十四周) 天气:晴

        这周是第十四周,这周只做了两件事!

        第一件就是把门诊预约的二层弹窗并返回给做了出来,第二件事就是一直在研究EF,看哪个框架了!

        截止目前为止我也差不多了解了那个框架的真个运行过程,要想了解的更细致的话。需要看到其他的功能然后看每个功能的具体实现步骤,那这个框架也就熟悉的差不多了。可以上手把底层拿出来写项目了!这个框架的底层帮你封装好了很多很实用的函数!如果有需要就可以直接调用这里面的方法就可以了!

        这周在研究框架的同时也在研究买回来的那本EF实体精要,了解了一些新的东西!原来以前我用的那种写法叫做EF Designer设计器模式,就是在设计器里可以看到数据库里每一张表。但是现在很少有人用这种方式了,大部分用的都是Code First模式去使用。也就是Model加EF上下文去和数据库里的每一张表进行相互一一对应,这种Code First有两种模式。其一就是使用来自于数据库的Code First他会自动帮你创建好和数据库里的表相对应的Model,然后通过相对应的Model的类名区队相同的数据库进行操作!其二就是先建立Model和数据库里的表相互对应,然后在创建一个类去基层DBContext。去实现和数据库进行数据操作!

         还有就是Model类里字段是上方的定义官方佳作数据的注解!

         每一种注解都代表着特定的含义!

         我之前写的Linq没有用到EF的上下文,是直接通过创建对象的方式去对数据库的数据进行操作!这边是通过上下文的映射去实现对数据的操作,就是一下的代码!

  

         我已经读懂这段代码的意思了,这段代码的意思是没有用我以前的New对象。而是把所有的数据操作请求放在一个线程内去执行,当要发起一次请求的时候通过CallContext微软封装的这个类去进行处理。像我之前用的New对象每次请求都回去对数据库进行一次操作,虽说每次拿到的都会是正确的数据不会造成脏读问题的存在。但是数据量大了请求的次数多了很消耗程序的性能!所有就有了这个上下文的存在。

         这段代码把每次的请求都通过CalContext去处理,当这次请求处理完以后线程并不会被立即销毁。这个上下文的对象也一直存在,当发起另外一个不同的请求的时候会在这个线程内存储另外一个对象!这些对象都存储在内存中!减少了对程序性能的消耗,但是增加了对内存的消耗!

          我这几天翻阅文章发现了一种下面的写法:

 1 public static DbContext DbContext()
 2         {
 3             DbContext dbContext = HttpContext.Current.Items["dbContext"] as DbContext;
 4             if (dbContext == null)
 5             {
 6                 dbContext = new WebEntities();
 7                 HttpContext.Current.Items["dbContext"] =  dbContext;
 8             }
 9             return dbContext;
10         }

          在HttpContext中有一个Items属性,一次请求对应着一个HttpContext,请求结束,它自动释放,EF上下文也就不存在了。当发起另外一起请求的时候会再去获取上下文,不会对程序造成性能消耗,也不会增加内存的消耗!

          这也就是这几天翻阅的结果了,但整个人感觉还是有点懵的状态!没有人去询问,只有自己去摸索!有点痛苦,因为自己寻找出来的答案。内心没有那种自信去认为这样是对的,也寻找不到原理!

posted @ 2018-06-16 12:56  Sir奔  阅读(135)  评论(0)    收藏  举报