• MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五 --- 为List<MongoDBRef>增加扩展方法


    本次改动主要内容:为List<MongoDBRef>增加扩展方法

    在MongoDB.Repository的使用过程中,发现在一个类中只定义一个List<MongoDBRef>是不够用的,即IRefEntity和IDBRefContainer两个接口并不能满足实体设计的需要。在很多时候,我们需要有多个List<MongoDBRef>,而原IRefEntity接口中只定义了一个List<MongoDBRef>。实际情况如 我们定义一个用户类Customer,这个用户可以发送和接收消息,且该用户也有好友,消息接收人和好友都是Customer类型。此时IRefEntity接口将无可奈何。改动即针对这种情况提出解决方案。

    在Entity的子类中直接定义List<MongoDBRef> Receiver和List<MongoDBRef> Friends,放弃使用IRefEntity接口。本人也正在考虑IRefEntity接口是否将在后续的版本中废除。定义代码如:

        public class Teacher : Entity
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }
    
        public class Grade : Entity
        {
            public string Name { get; set; }
            public List<MongoDBRef> Teachers { get; set; }
        }

    对List<MongoDBRef> Teachers的相应操作如下:

            [TestCase]
            public void Test()
            {
                Grade grade = new Grade() { Name = "Grade1"};
                foreach (var teacher in teachers)
                {
                    teacher.Save();
                    grade.Teachers.Add(teacher.ToDBRef());
                }
                grade.Save();
                var teach = grade.Teachers.RefPick<Teacher>(teachers[0].Id);
                var ts = grade.Teachers.RefPick<Teacher>(t => t.Age >= 50);
                Assert.AreEqual(2, ts.Count);
                Assert.AreEqual(teach.Id, teachers[0].Id);
                Assert.AreEqual(teach.Name, teachers[0].Name);
            }

    除RefPick<T>()外,并有RefExists<T>()方法配合,已完成对List<MongoDBRef>属性的操作。

    目前保持IRefEntity接口不变,后续版本可能会删除该接口,因为其存在的意义不大了。

    源码

  • 相关阅读:
    C++:智能指针TR1的shared_ptr和weak_ptr使用介绍
    makefile文件
    php中格式化输出函数vprintf printf sprintf sscanf
    SQLite轻量级数据库简介(转)
    非常有用的免费UI设计工具和资源
    IAR编译duplicate definitions for IAR报错解决办法
    ATMEL推出无需授权费用的ARM处理器的定制SoC MPCFII技术
    DM9000 寄存器的定义
    php 5.3.6 连接sqlite3
    Jquery 取值 发送ajax,并修改原网页的数据
  • 原文地址:https://www.cnblogs.com/winhu/p/3429836.html
Copyright © 2020-2023  润新知