<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      MongoDB學(xué)習(xí)筆記~Update方法更新集合屬性后的怪問題

      回到目錄

      在對MongoDB進行封裝后,對于Update更新對象里的集合屬性時出現(xiàn)了一個現(xiàn)象,讓人感到很惡心,人家更新前是個美麗的Array,但是更新之后集合對象變成了鍵值對,鍵是集合的類型名稱,值是真實的數(shù)組值,哈哈,這個問題起初困擾了我很久,今天終于豁然開朗了,原來是Update方法的問題,呵呵!

      看原來的值

      看更新后的變質(zhì)的值

      再看看我們的Update方法

          public Task UpdateAsync(TEntity item)
              {
                  var query = new QueryDocument("_id", typeof(TEntity).GetProperty(EntityKey).GetValue(item).ToString());
                  var fieldList = new List<UpdateDefinition<TEntity>>();
                  foreach (var property in typeof(TEntity).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                  {
                      if (property.Name != EntityKey)//更新集中不能有實體鍵_id
                      {
                          fieldList.Add(Builders<TEntity>.Update.Set(property.Name, property.GetValue(item)));
                      }
                  }
      
                  return ForWait(() => _table.UpdateOneAsync(query, Builders<TEntity>.Update.Combine(fieldList)));
      
              }

      確實沒看出什么問題來,但最后它生成的代碼是以_t和_v為鍵值的值,出現(xiàn)這種情況的原因是你的代碼沒有被mongo識別,就像之前我們?yōu)閙ongo傳decimal類型的數(shù)據(jù)一樣,它也會出現(xiàn)同樣的情況。

      解決方法

      將復(fù)雜類型進行拆封和組裝,讓它被mongo所認識,這樣update操作就可以按著我們預(yù)想的完成了,值得注意的是,如果你的對象里有復(fù)雜類型,如Person類里有Address類型,那么在賦值時我們拼成以下這樣

      Address.City="北京"

      而如果你的對象里屬性為集合類型,那就更麻煩一些,除了做上面的拆封外,還要關(guān)注它的索引號,如Person類里有AddList集合屬性,那么在賦值時我們拼成以下這樣

      AddList.0.City="北京"

      下面公開大叔的Update代碼

              public Task UpdateAsync(TEntity item)
              {
                  var query = new QueryDocument("_id", typeof(TEntity).GetProperty(EntityKey).GetValue(item).ToString());
                  var fieldList = new List<UpdateDefinition<TEntity>>();
                  foreach (var property in typeof(TEntity).GetProperties(BindingFlags.Instance | BindingFlags.Public))
                  {
                      //非空的復(fù)雜類型
                      if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && property.GetValue(item) != null)
                      {
      
                          if (typeof(IList).IsAssignableFrom(property.PropertyType))
                          {
                              #region 集合類型
                              foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                              {
                                  if (sub.PropertyType.IsClass && sub.PropertyType != typeof(string))
                                  {
                                      var arr = property.GetValue(item) as IList;
                                      if (arr != null && arr.Count > 0)
                                      {
                                          for (int s = 0; s < arr.Count; s++)
                                          {
                                              foreach (var subInner in sub.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                                              {
                                                  //propertyName.index.innerPropertyName
                                                  fieldList.Add(Builders<TEntity>.Update.Set(property.Name + "."+ s + "." + subInner.Name, subInner.GetValue(arr[s])));
                                              }
                                          }
                                      }
                                  }
                              }
                              #endregion
                          }
                          else
                          {
                              #region 實體類型
                              //復(fù)雜類型,導(dǎo)航屬性,類對象和集合對象 
                              foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
                              {
                                  fieldList.Add(Builders<TEntity>.Update.Set(property.Name + "." + sub.Name, sub.GetValue(property.GetValue(item))));
                              }
                              #endregion
                          }
                      }
                      else //簡單類型
                      {
                          if (property.Name != EntityKey)//更新集中不能有實體鍵_id
                          {
                              fieldList.Add(Builders<TEntity>.Update.Set(property.Name, property.GetValue(item)));
                          }
                      }
                  }
      
                  return ForWait(() => _table.UpdateOneAsync(query, Builders<TEntity>.Update.Combine(fieldList)));
      
              }

      希望本文章對使用MongoDB的學(xué)生來說有所幫助!

      回到目錄

       

      posted @ 2015-05-29 15:08  張占嶺  閱讀(5700)  評論(3)    收藏  舉報
      主站蜘蛛池模板: 国产精品任我爽爆在线播放6080| 中国少妇人妻xxxxx| 日韩人妻无码精品久久| 欧美老熟妇乱子伦牲交视频| 亚洲AV永久无码嘿嘿嘿嘿| 久久精品国产亚洲精品色婷婷| 亚洲欧洲日韩精品在线| 国产精品99久久久久久董美香| WWW丫丫国产成人精品| 国产成人精品一区二区三区免费 | 久久精品国产99久久久古代| 九九热在线视频免费播放| 国产精品店无码一区二区三区| 92久久精品一区二区| 亚洲精品综合久中文字幕| 一区二区福利在线视频| h动态图男女啪啪27报gif| 亚洲男人在线天堂| 国产精品一区二区三区卡| 蜜桃网址| 免费a级毛片无码av| 水蜜桃视频在线观看免费18| 鲁丝一区二区三区免费| 灵石县| 亚洲人精品午夜射精日韩| 熟妇人妻无码中文字幕老熟妇 | 另类 专区 欧美 制服| 日韩中文字幕有码午夜美女| 起碰免费公开97在线视频| 免费人成视频在线播放| 欧美片内射欧美美美妇| 国产午夜福利精品视频| 久久国产精品精品国产色婷婷| 一区二区三区AV波多野结衣| 精品国产一区二区三区性色| 另类 专区 欧美 制服| 男女爽爽无遮挡午夜视频| 色婷婷欧美在线播放内射| 日韩中文免费一区二区| 91中文字幕一区在线| 国产精品久久久久久久久久直播|