欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

更新自己,不要影響其他人

系統(tǒng) 1738 0

最近圍繞著c++和C#的討論越來越激烈,firelong努力著證明自己的觀點,園子里一些大大們也在激烈的辯證著,作為小鳥的我,旁觀,看看一笑而過吧。

其實無論哪種語言,肯定有它的優(yōu)勢和劣勢,我們何必去爭個你死我活呢?我承認firelong有些觀點正確,但這些會影響我們嗎?我相信有一定基礎(chǔ)的程序員,都不會去在意,因為我們選擇的不僅僅是語言,或許還有更多,如果單單靠某些人的一些觀點,我們就改變了,那也太沒立場了,變成墻頭草了不是?

但我很喜歡看這種討論,因為firelong把自己的觀點,例子舉了出來,而不是理論上的進行駁斥,這種文章看出來是作者用心實踐過的,我們應(yīng)該支持,對于那種沒有實踐,只是一再的崇拜或者詆毀的人,出來就是辱罵的,大家一起來鄙視下吧。

今天不是為了參與討論,正好今天遇到了個問題(其實一直懶得解決),符合了標題,隨便說說,說的難聽了,大家見諒,笑笑而過吧。

問題其實很簡單,更新靜態(tài)變量的值,而這個值呢,又是從linq to sql中獲取的,大概的結(jié)構(gòu)如下:

    
    
    
      public class 
    
    
      MyConfig

    
    
    
      {

        
    
    
      private static 
    
    
      DataLoader 
    
    
      s_loader;



        
    
    
      static 
    
    
      MyConfig()

        {

            s_loader = 
    
    
      new 
    
    
      DataLoader
    
    
      ();

        }



        
    
    
      public static 
    
    
      List
    
    
      <
    
    
      Company
    
    
      > AllCompanies

        {

            
    
    
      get

            
    
    
      {

                
    
    
      return 
    
    
      s_loader.GetAllCompanies();

            }

        }



        
    
    
      public static 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > AllTypes

        {

            
    
    
      get

            
    
    
      {

                
    
    
      return 
    
    
      s_loader.GetAllTypes();

            }

        }

    }
    
  

?

簡單的一個獲取配置信息的一個類(這是舉例用的,實際使用中并不是這樣)。

DataLoader 是與數(shù)據(jù)庫相關(guān)的一個操作類,主要是通過linq to sql 來獲取數(shù)據(jù)庫中的信息。

代碼:

    
      public class 
    
    
      DataLoader

    
    
    
      {

        
    
    
      public 
    
    
      DataLoader()

        {


    
    
              }



        
    
    
      DataClasses1DataContext 
    
    
      context = 
    
    
      new 
    
    
      DataClasses1DataContext
    
    
      ();



        
    
    
      internal 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > GetAllTypes()

        {

            

            
    
    
      return 
    
    
      context.MyType.ToList();

        }



        
    
    
      internal 
    
    
      List
    
    
      <
    
    
      Company
    
    
      > GetAllCompanies()

        {

            
    
    
      return 
    
    
      context.Company.ToList();

        }

    }
    
  

代碼丑了點,見諒見諒,主要的目的只有2個,獲取所有類型和獲取所有公司。

實際運用在了web項目中,又有另外一個后臺專門來修改數(shù)據(jù),這時候就出現(xiàn)了一個問題,默認情況下,linq to sql 會從緩存中獲取數(shù)據(jù)。

操作步驟如下:循環(huán)讀取MyType-》無論利用什么方法,修改數(shù)據(jù)庫的MyType值-》再次讀取。

因為用了命令行項目來實驗的,那必須修改前和修改后都不能關(guān)閉命令行程序。以下簡單的測試代碼:

    
    
    
      static void 
    
    
      Main(
    
    
      string
    
    
      [] args)

        {

            
    
    
      var 
    
    
      key = 
    
    
      String
    
    
      .Empty;

            
    
    
      while 
    
    
      (key != 
    
    
      "quit"
    
    
      )

            {

                key = 
    
    
      Console
    
    
      .ReadLine();

                
    
    
      MyConfig
    
    
      .AllTypes.ForEach(c => 
    
    
      Console
    
    
      .WriteLine(c.Title));

                
    
    
      MyConfig
    
    
      .AllCompanies.ForEach(c => 
    
    
      Console
    
    
      .WriteLine(c.Name));

            }



            
    
    
      Console
    
    
      .WriteLine(
    
    
      "program to quit..."
    
    
      );

            
    
    
      //Console.ReadLine();

        
    
    
      }
    
  

測試很簡單,只要不輸入quit,每次都會輸出類型標題和公司名稱。看下前后結(jié)果:

image (修改前讀取的數(shù)據(jù))

image image (利用Sql Manager Studio修改數(shù)據(jù))

? image (修改后讀取的數(shù)據(jù))

?

看到了,這就是linq to sql 的緩存造成的結(jié)果,為了避免這個情況,我們可以使用以下方法:

1、把DataContext.ObjectTrackingEnabled屬性設(shè)置為false

???? 因為linq to sql獲取數(shù)據(jù)緩存的時候,先檢索標識是否改變,如果未改變,則會用緩存中的數(shù)據(jù)。而ObjectTrackingEnabled設(shè)為false后,會關(guān)閉標識管理和變化跟蹤,那樣每次獲取都會是最新的數(shù)據(jù)。(以下是重新測試結(jié)果,測試前數(shù)據(jù)恢復(fù))

image ??? ----?? image

目的是達到了,我們知道關(guān)閉ObjectTrackingEnabled屬性,是一個好的提升性能的方式,但有時候也會造成一定的麻煩,比如更新、比如我要獲取一對多,多對多的對象時。(其實是自己一開始沒注意到,等改了以后發(fā)現(xiàn)項目中。。。。已經(jīng)慘不忍睹了,綠一下自己)。

2、DataContext.Refresh方法。

????? 使用指定方法刷新實體對象(摘自msdn)。使用它以后,我能更新自己,而不影響其他人了。Refresh的方法,大家可以看msdn,我就寫下代碼吧,代碼只修改了獲取類型的方法。

    
      internal 
    
    
      List
    
    
      <
    
    
      MyType
    
    
      > GetAllTypes()

        {

            
    
    
      var 
    
    
      types = context.MyType.ToList();



            context.Refresh(
    
    
      RefreshMode
    
    
      .KeepChanges, types);



            
    
    
      return 
    
    
      types;

        }
    
  

我們再測試下(數(shù)據(jù)恢復(fù)先,直接上結(jié)果了):

image

實驗成功,獲取到了最新的MyType值,而公司的值則是修改前的,當(dāng)然在程序下次運行的時候,就會變成最新的了。

3、重新實例化DataContext。(不說了)

?

以上東東純屬亂寫,只是自己遇到的一個問題,可能寫的不好,大家也不要拼命砸磚哦。

?

再說說最近的激辯吧,大家也不要辯論什么了,只要做好自己,努力提高自己就好,我們在實際應(yīng)用中,會遇到許許多多的項目,每個項目的開始,都會商量好用什么語言來寫,什么框架來建,不要為了哪個語言好哪個語言不好去爭個不休,每個項目都會有不同的需求,用最適合的而不是用最好的,那就行了。

更新自己,不要影響其他人


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天干天天操天天做 | 久久爱成人网 | 日本久久久久中文字幕 | 成人嗯啊视频在线观看 | 国产亚州av| 欧美一级小视频 | 日韩欧美视频免费观看 | 久久免费看少妇高潮A片JA | 国产二区三区在线播放 | 欧美日韩精品一区三区 | 欧美一区二区三区播放 | 中文字幕在线观看 | 人人艹逼 | 五月色播影音在线观看 | 96国产xxxx| 国产一级一级毛片 | 久久国产精品99久久小说 | 99最新地址| 欧美日韩精品一区二区 | 无码又黄又爽又舒服的A片 综合久久网 | 国产毛片欧美毛片久久久 | 日干夜干天天干 | 国产精品毛片久久久久久久 | 奇米影视88| 日韩精品久久久久影院 | 日韩国产一区二区 | 精品久久久久久久久久久 | 国产在线日韩在线 | 国产乱码精品一区二区三区中 | 九九视频在线观看 | 日本中文字幕不卡 | 国产一区www | 久久久久国产精品 | 亚洲国产成人va在线观看网址 | 色婷综合 | 亚洲综合激情小说 | www.youjizz.com亚洲 | 欧美综合区 | 久草资源在线视频 | 久久综合欧美 | 欧美成人久久 |