Есть ли механизм персистентности, который может обрабатывать сложные данные, разделенные пользователем, для .Net? - PullRequest
2 голосов
/ 13 января 2012

Допустим, у меня есть эта модель:

  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();

, которое вернуло бы, например, "Джойс", Джонас "и" Джуджа ", но НЕ" Стив "," Билл "или" Зафод "

СейчасПредположим, что у Учителя "Джойс" есть коллекция учеников с именами "Арнольд", "Беверли", "Джолин", "Джером" и "Зак".

Существует ли механизм персистентности или OR / M, который сделаетуверены, что когда я получу доступ к «Студентам Джойса», он вернет только «Джолин» и «Джером» для меня и «Арнольд» для пользователя с именем «Аннабель»?

  • Я хочу это во всем хранилищетаким образом, если я позже создам объект Classroom с учениками и учителями, я хочу, чтобы эти коллекции отображали только доступных учителей и учеников.
  • Алгоритм определения того, что доступно, может быть довольно сложным и зависеть от других данных вхранилище.
  • SQL, noSQL или другие варианты в порядке.

1 Ответ

0 голосов
/ 13 января 2012

По-моему, это не работа персистентного двигателя / ORM. Работа ORM заключается в отображении реляционного мира в объектно-ориентированный мир, то есть из вашей базы данных в ваш объект.

Вы можете сделать это двумя совершенно разными способами:

  1. Создайте представление для каждой таблицы, которую необходимо отфильтровать следующим образом. Сопоставьте свои объекты в ORM не с таблицами, а с представлениями. При инициализации сеанса базы данных каким-то образом сделайте текущий пользователь известным базе данных.
  2. Выполните фильтрацию в своем приложении как часть бизнес-логики.

Я бы выбрал вариант 2, если это не приведет к передаче большого количества ненужных данных.

...