MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含12823字,纯文字阅读大概需要19分钟。
内容图文
一 从超级变态的类开始
public class Person : Base { public Person() { Contact = new Test.Contact(); OrderList = new List<Order>(); } public string Name { get; set; } public DateTime LastContact { get; set; } public DateTime Birthday { get; set; } public int Age { get; set; } #region 值对象 /// <summary> /// 统计 /// </summary> public Total Total { get; set; } /// <summary> /// 联系方式和地址 /// </summary> public Contact Contact { get; set; } #endregion #region 列表实体 public List<Order> OrderList { get; set; } #endregion } public class Section { public string SectionID { get; set; } public string SectionName { get; set; } } public class Area { public Area() { Section = new Section(); } public string Province { get; set; } public string City { get; set; } public string District { get; set; } public Section Section { get; set; } } public class Contact { public Contact() { Area = new Area(); } public string PostCode { get; set; } public string Email { get; set; } public string Phone { get; set; } public Area Area { get; set; } } public class Total { public int Count { get; set; } public int Max { get; set; } } public class Order { public Order() { Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); this.OrderDetail = new List<OrderDetail>(); this.User_Info = new User_Info(); } public string UserId { get; set; } public string UserName { get; set; } public string Id { get; set; } public double Price { get; set; } public DateTime AddTime { get; set; } public User_Info User_Info { get; set; } public List<OrderDetail> OrderDetail { get; set; } } public class User_Info { public User_Info() { Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); } public string Id { get; set; } public string Name { get; set; } } public class OrderDetail { public OrderDetail() { Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); } public string Id { get; set; } public string OrderId { get; set; } public string ProductName { get; set; } public int Count { get; set; } public double Price { get; set; } public string SellerId { get; set; } }
看到上面的类,绝对够你喝一壶的,呵呵,这是一个复杂的类型People,它有实体属性contact和列表属性OrderList
而对于之前大叔的框架里,这种结构是不被支持的,大叔只能支持到3级嵌套,但这显然是不够的,最后大叔硬着头皮冲了上来,把这个骨头啃掉了,哈哈!
下面贡献我的Recursion代码
/// <summary> /// 递归构建Update操作串 /// </summary> /// <param name="fieldList"></param> /// <param name="property"></param> /// <param name="propertyValue"></param> /// <param name="item"></param> /// <param name="father"></param> private void GenerateRecursion( List<UpdateDefinition<TEntity>> fieldList, PropertyInfo property, object propertyValue, TEntity item, string father) { //复杂类型 if (property.PropertyType.IsClass && property.PropertyType != typeof(string) && propertyValue != null) { //集合 if (typeof(IList).IsAssignableFrom(propertyValue.GetType())) { foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (sub.PropertyType.IsClass && sub.PropertyType != typeof(string)) { var arr = propertyValue as IList; if (arr != null && arr.Count > 0) { for (int index = 0; index < arr.Count; index++) { foreach (var subInner in sub.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (string.IsNullOrWhiteSpace(father)) GenerateRecursion(fieldList, subInner, subInner.GetValue(arr[index]), item, property.Name + "." + index); else GenerateRecursion(fieldList, subInner, subInner.GetValue(arr[index]), item, father + "." + property.Name + "." + index); } } } } } } //实体 else { foreach (var sub in property.PropertyType.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (string.IsNullOrWhiteSpace(father)) GenerateRecursion(fieldList, sub, sub.GetValue(propertyValue), item, property.Name); else GenerateRecursion(fieldList, sub, sub.GetValue(propertyValue), item, father + "." + property.Name); } } } //简单类型 else { if (property.Name != EntityKey)//更新集中不能有实体键_id { if (string.IsNullOrWhiteSpace(father)) fieldList.Add(Builders<TEntity>.Update.Set(property.Name, propertyValue)); else fieldList.Add(Builders<TEntity>.Update.Set(father + "." + property.Name, propertyValue)); } } } /// <summary> /// 构建Mongo的更新表达式 /// </summary> /// <param name="entity"></param> /// <returns></returns> private List<UpdateDefinition<TEntity>> GeneratorMongoUpdate(TEntity item) { var fieldList = new List<UpdateDefinition<TEntity>>(); foreach (var property in typeof(TEntity).GetProperties(BindingFlags.Instance | BindingFlags.Public)) { GenerateRecursion(fieldList, property, property.GetValue(item), item, string.Empty); } return fieldList; }
最后的结果,当然是在N层失败之后,取得了成功,呵呵!
<img alt="技术分享" src="http://www.mamicode.com/data:image/png;base64,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 本文系统来源:http://www.cnblogs.com/lori/p/4553185.html
内容总结
以上是互联网集市为您收集整理的MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!全部内容,希望文章能够帮你解决MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。