MongoDB:利用官方驅動改裝爲EF代碼風格的MongoDB.Repository框架 五 --- 爲List增長擴展方法

本次改動主要內容:爲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

源碼接口

相關文章
相關標籤/搜索