本次改动主要内容:为List<MongoDBRef>增长扩展方法git
在MongoDB.Repository的使用过程当中,发如今一个类中只定义一个List<MongoDBRef>是不够用的,即IRefEntity和IDBRefContainer两个接口并不能知足实体设计的须要。在不少时候,咱们须要有多个List<MongoDBRef>,而原IRefEntity接口中只定义了一个List<MongoDBRef>。实际状况如 咱们定义一个用户类Customer,这个用户能够发送和接收消息,且该用户也有好友,消息接收人和好友都是Customer类型。此时IRefEntity接口将迫不得已。改动即针对这种状况提出解决方案。github
在Entity的子类中直接定义List<MongoDBRef> Receiver和List<MongoDBRef> Friends,放弃使用IRefEntity接口。本人也正在考虑IRefEntity接口是否将在后续的版本中废除。定义代码如:spa
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>属性的操做。code
目前保持IRefEntity接口不变,后续版本可能会删除该接口,由于其存在的意义不大了。blog
源码接口