是否有持久性引擎可以处理.Net的复杂用户分区数据?

时间:2012-01-13 06:47:35

标签: .net orm persistence

假设我有这个模型:

  class Teacher
  {
     public string Name { get; set; }
     public IEnumerable<Student> Students { get; set; }
  }

  class Student
  {
     public string Name { get; set; }
     public IEnumerable<Teacher> Teachers { get; set; }
  }

通过某种算法,用户只能看到教师和学生的子集,在这个例子中,我只能看到名字与我的字母相同的教师和学生。所以我想要这样的东西:

var myViewableTeachers = persistenceStore.Teachers();

将返回例如“Joyce”,Jonas“和”Juja“但不是”Steve“,”Bill“或”Zaphod“

现在假设教师“乔伊斯”有一个名为“阿诺德”,“贝弗利”,“乔丹”,“杰罗姆”和“扎克”的学生集合。

是否存在持久性引擎或OR / M,以确保当我访问Joyce学生时,它只会为我返回“Jolene”和“Jerome”,而“Arnold”则会返回名为“Annabelle”的用户?< / p>

  • 我想在整个存储引擎中使用它,所以如果我稍后与学生和教师一起创建一个Classroom对象,我希望这些集合只显示可访问的教师和学生。
  • 确定可访问内容的算法可能非常复杂,并且依赖于存储中的其他数据。
  • SQL,noSQL或其他选项都可以。

1 个答案:

答案 0 :(得分:0)

在我看来,这不是持久性引擎/ ORM的工作。 ORM的工作是将关系世界映射到面向对象的世界,即它从您的数据库映射到您的对象。

你可以用两种截然不同的方式做到这一点:

  1. 为需要像这样过滤的每个表创建一个视图。将ORM中的对象映射到表但不映射到视图。初始化数据库会话时,以某种方式使数据库知道当前用户。
  2. 在您的应用程序中执行过滤,作为业务逻辑的一部分。
  3. 我会使用选项2,除非它会导致大量不必要的数据传输。