国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

c#用mongodb官方driver寫的一些蛋疼的封裝類

2019-11-14 13:39:02
字體:
來源:轉載
供稿:網友

  其實我真的很討厭用.net,尤其是自從接觸了nodejs,go之后,就更討厭用.net了。不過公司還是非要用,而且寫了這么個接口,這個也不算什么代碼產權,所以放出來,大家看看用得著的就拿走,寫的不好的幫我改改,我也能提高提高。

  一共就兩個類一個接口,接口我就不放了,兩個類中的代碼我放出一些,然后調用Demo放一下。

  這個是那個處理類

  1 public partial class MongoHelperFromEntity<T>: IMongoHelper<T>  2     {  3         #region variable  4         IMongoClient mongoClient = null;  5         IMongoCollection<T> collection = null;  6         IMongoDatabase db;  7         string connString = string.Empty;  8         string connDB = string.Empty;  9         #endregion 10         public MongoHelperFromEntity(string collectionname) 11         { 12             #region check webconfig 13             try 14             { 15                 connString = ConfigurationManager.AppSettings["mongodbConnection"]; 16             } 17             catch (Exception) 18             { 19                 throw new Exception("plese add mongodbConnection in webconfig"); 20             } 21             try 22             { 23                 connDB = ConfigurationManager.AppSettings["mongodbDatabase"]; 24             } 25             catch (Exception) 26             { 27                 throw new Exception("plese add mongodbDatabase in webconfig"); 28             } 29             #endregion  30             if (mongoClient == null) 31             { 32                 mongoClient = new MongoClient(connString); 33                 db = mongoClient.GetDatabase(connDB); 34                 collection = db.GetCollection<T>(collectionname); 35             } 36         } 37         #region fun 38         PRivate async Task<string> _Insert(T entity) 39         { 40  41             string flag = null; 42             try 43             { 44                 flag = ObjectId.GenerateNewId().ToString(); 45                 entity.GetType().GetProperty("_id").SetValue(entity, flag); 46                 await collection.InsertOneAsync(entity); 47             } 48             catch (Exception)  49             { 50                  51             } 52             return flag; 53         } 54         Task<UpdateResult> _Push(string id, Expression<Func<T, IEnumerable<object>>> filed, object value) 55         { 56             Task<UpdateResult> flag = null; 57             try 58             { 59                 FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id); 60                 flag = collection.UpdateOneAsync(filter, MongoDB.Driver.Builders<T>.Update.Push(filed, value)); 61             } 62             catch (Exception){} 63             return flag; 64         } 65         Task<UpdateResult> _Pull<C>(string id, Expression<Func<T, IEnumerable<C>>> filed, Expression<Func<C, bool>> expression) 66         { 67             Task<UpdateResult> flag = null; 68             try 69             { 70                 FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id); 71                 flag = collection.UpdateOneAsync(filter, MongoDB.Driver.Builders<T>.Update.PullFilter(filed,expression)); 72             } 73             catch (Exception) { } 74             return flag; 75         } 76         Task<List<T>> _Find(string[] fields, Dictionary<string, int> sortfields, System.Linq.Expressions.Expression<Func<T, bool>> expression) 77         { 78             IFindFluent<T, T> iff = null; 79             if (expression == null) 80             { 81                 iff = collection.Find<T>(new BsonDocument()); 82             } 83             else 84             { 85                 iff = collection.Find<T>(expression); 86             } 87             if (fields.Length > 0) 88             { 89                 Dictionary<string,int> dicfields = new Dictionary<string,int>(); 90                 foreach (string item in fields) 91                 { 92                     dicfields.Add(item,1); 93                 } 94                 iff = iff.Project<T>(Tools<T>.getDisplayFiles(dicfields)); 95             } 96             if(sortfields != null) 97             { 98                 iff = iff.Sort(Tools<T>.getSortDefinition(sortfields)); 99             }100             return iff.ToListAsync();101         }102         Task<T> _FindOne(string id,string[] fields)103         {104             Task<T> result = null;105             IFindFluent<T, T> iff = null;106             try107             {108                 FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id);109                 iff = collection.Find<T>(filter);110                 if (fields!= null && fields.Length > 0)111                 {112                     Dictionary<string, int> dicfields = new Dictionary<string, int>();113                     foreach (string item in fields)114                     {115                         dicfields.Add(item, 1);116                     }117                     iff = iff.Project<T>(Tools<T>.getDisplayFiles(dicfields));118                 }119                 result = iff.FirstOrDefaultAsync();120             }121             catch (Exception)122             {123             }124             return result;125 126         }127         Task<ReplaceOneResult> _Replace(string id , object data)128         {129             Task<ReplaceOneResult> result = null;130             try131             {132                 FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id);133                 data.GetType().GetProperty("_id").SetValue(data, id);134                 result = collection.ReplaceOneAsync(filter, (T)data);135             }136             catch (Exception)137             {138             }139             return result;140         }141         Task<UpdateResult> _Update(string id,Dictionary<string,object> updatedic)142         {143             Task<UpdateResult> result = null;144             if (updatedic.Count > 0)145             {146                 try147                 {148                     FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id);149                     result = collection.UpdateOneAsync(filter, Tools<T>.getUpdateDefinition(updatedic));150                 }151                 catch (Exception)152                 {153                 }154                 155             }156             return result;157         }158         Task<DeleteResult> _Delete(string id)159         {160             Task<DeleteResult> result = null;161             try162             {163                 FilterDefinition<T> filter = Builders<T>.Filter.Eq("_id", id);164                 result =collection.DeleteOneAsync(filter);165             }166             catch (Exception)167             {168                 169             }170             return result;171         }172         #endregion173     }
View Code

  這個是一個工具類,我本來想放一些公用的東西,但是貌似沒提出多少

 1     public static class Tools<T> 2     { 3         public static FieldsDocument getDisplayFiles(Dictionary<string, int> fields) 4         { 5             FieldsDocument fd = new FieldsDocument(); 6             fd.AddRange(fields); 7             return fd; 8         } 9         public static SortDefinition<T> getSortDefinition(Dictionary<string,int> sortfields)10         {11             SortDefinition<T> sd = null;12             foreach (var item in sortfields)13             {14                 if (sd == null)15                 {16                     if (item.Value == 1)17                     {18                         sd = Builders<T>.Sort.Ascending(item.Key);19                     }20                     else21                     {22                         sd = Builders<T>.Sort.Descending(item.Key);23                     }24                 }25                 else26                 {27                     if (item.Value == 1)28                     {29                         sd.Ascending(item.Key);30                     }31                     else32                     {33                         sd.Descending(item.Key);34                     }35                 }36             }37             return sd;38         }39         public static UpdateDefinition<T> getUpdateDefinition(Dictionary<string, object> updatedic)40         {41             UpdateDefinition<T> ud = null;42             foreach (var item in updatedic)43             {44                 if (ud == null)45                 {46                     ud = Builders<T>.Update.Set(item.Key, item.Value);47                 }48                 else49                 {50                     ud.Set(item.Key, item.Value);51                 }52             }53             return ud;54         }55     }
View Code

  然后這里是一些調用的demo,當然是調用接口,大家要用的時候自己寫一個接口類然后調用或者直接實例化調用就好了。

  1 IMongoHelper<Document> imh;  2         protected void Page_Load(object sender, EventArgs e)  3         {  4             imh = new MongoHelperFromEntity<Document>("Documents");  5             #region Insert  6             for (int i = 1; i < 11; i++)  7             {  8                 if (imh.Insert(new Document("document" + i.ToString())) == null)  9                 { 10                     Response.Write("<scr"); 11                     break; 12                 } 13             } 14             Response.Write("<script>alert('ok')</script>"); 15             #endregion 16             #region Push 17             if (imh.Push("568231e7d6f684683c253f6a", d => d.Comment, new Comment("CN002", "Hi"))) 18             { 19                 Response.Write("<script>alert('ok')</script>"); 20             } 21             else 22             { 23                 Response.Write("<script>alert('err')</script>"); 24             } 25             #endregion 26             #region Pull 27             if (imh.Pull<Comment>("568231e7d6f684683c253f6a", d => d.Comment, c => c.StaffID == "CN001")) 28             { 29                 Response.Write("<script>alert('ok')</script>"); 30             } 31             else 32             { 33                 Response.Write("<script>alert('err')</script>"); 34             } 35             #endregion 36             #region FindOne 37             Document doc = imh.FindOne("56822480d6f68424c8db56f2").Result; 38             #endregion 39             #region Find 40             string[] fields = { "Title" }; 41             Dictionary<string, int> dicfields = new Dictionary<string, int>(); 42             dicfields.Add("Time", 0); 43             List<Document> uu = imh.Find(fields, dicfields, u => u._id == "568231e7d6f684683c253f73").Result; 44             #endregion 45             #region Replace 46             if (imh.Replace("568231e7d6f684683c253f6a", new Document("document_replace"))) 47             { 48                 Response.Write("<script>alert('ok')</script>"); 49             } 50             else 51             { 52                 Response.Write("<script>alert('err')</script>"); 53             } 54             #endregion 55             #region Update 56             Dictionary<string, object> dic = new Dictionary<string, object>(); 57             dic.Add("Title", "document_update"); 58             dic.Add("Time", DateTime.Now); 59             if (imh.Update("568231e7d6f684683c253f73", dic)) 60             { 61                 Response.Write("<script>alert('ok')</script>"); 62             } 63             else 64             { 65                 Response.Write("<script>alert('err')</script>"); 66             } 67             #endregion 68             #region Delete 69             if (imh.Delete("568231e7d6f684683c253f73")) 70             { 71                 Response.Write("<script>alert('ok')</script>"); 72             } 73             else 74             { 75                 Response.Write("<script>alert('err')</script>"); 76             } 77             #endregion 78             //要注意的地方 79             //1.是lambda準確 80  81             //2.在構造對象時,如果這個對象是一個collection中的document時,一定要添加屬性"_id",例如Model中Document中所示,在Insert時,_id不用賦值,后臺會賦值,但是所用名稱一定按照如下所示 82             //private object id; 83             //public object _id 84             //{ 85             //    get { return id; } 86             //    set { id = value; } 87             //} 88  89             //3.當對象中有List行屬性時一定要付初值例如Model中Document中所示 90             //private List<Comment> _Comment ; 91             //public List<Comment> Comment 92             //{ 93             //    get { 94             //        if (_Comment == null) { _Comment = new List<Comment>(); } 95             //        return _Comment;  96             //    } 97             //    set { _Comment = value; } 98             //} 99 100             //4.Pull操作中后面的對象為要插入到List中的對象101 102             //5.Web.config中mongodbConnection為MongoServer地址,可以使用;mongodbDatabase 為數據庫名稱,可以改成想要的103         }
View Code

  這里面有insert,find,findone,push,pull,delete,replace,update這些方法,可能根據項目不同需求還要改一些,到時我再更新,不過這東西我也就是記在這,而已。。。如果別人要用,就拿走吧,寫的不好,別噴。

  然后其實我有幾個問題,大家如果誰知道可以給我留言,小二先謝謝啦。

  1.在我的數據對象里,如果一個屬性我沒有賦值,怎么樣能讓它不插入,也就是只插入有值得字段?

  2.我在push的時候,不知道為什么mongo會幫我生成一個屬性“_t”:"ClassName",這里的ClassName其實是我傳入的對象的名稱,這個想制止它,要怎么玩兒?

  轉載請注明
      作者:李小二的春天
      地址:http://www.survivalescaperooms.com/LittleTwoLee/p/5086316.html

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎囊县| 松溪县| 定兴县| 上饶县| 当雄县| 道孚县| 筠连县| 梅州市| 闸北区| 榆社县| 四平市| 廊坊市| 吴川市| 阜南县| 托克逊县| 佛冈县| 澜沧| 堆龙德庆县| 集贤县| 东辽县| 祁连县| 罗田县| 永仁县| 化州市| 霍山县| 石城县| 象山县| 满城县| 龙川县| 大兴区| 平安县| 杨浦区| 崇州市| 健康| 湖北省| 左权县| 葵青区| 阿拉善左旗| 天祝| 赤水市| 华安县|