ezeke 发表于 2015-7-6 08:58:14

MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五

  本次改动主要内容:为List增加扩展方法
  在MongoDB.Repository的使用过程中,发现在一个类中只定义一个List是不够用的,即IRefEntity和IDBRefContainer两个接口并不能满足实体设计的需要。在很多时候,我们需要有多个List,而原IRefEntity接口中只定义了一个List。实际情况如 我们定义一个用户类Customer,这个用户可以发送和接收消息,且该用户也有好友,消息接收人和好友都是Customer类型。此时IRefEntity接口将无可奈何。改动即针对这种情况提出解决方案。
  在Entity的子类中直接定义List Receiver和List 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 Teachers { get; set; }
}
  对List Teachers的相应操作如下:



      
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(teachers.Id);
var ts = grade.Teachers.RefPick(t => t.Age >= 50);
Assert.AreEqual(2, ts.Count);
Assert.AreEqual(teach.Id, teachers.Id);
Assert.AreEqual(teach.Name, teachers.Name);
}
  除RefPick()外,并有RefExists()方法配合,已完成对List属性的操作。
  目前保持IRefEntity接口不变,后续版本可能会删除该接口,因为其存在的意义不大了。
  源码
  
  
页: [1]
查看完整版本: MongoDB:利用官方驱动改装为EF代码风格的MongoDB.Repository框架 五