Есть много сообщений о том, как это сделать, но ни один из них не может решить мою проблему.
У меня есть PreLoadEventListener
, который устанавливает указанные атрибуты или коллекции в ноль, если у пользователя нет разрешений
public void OnPreLoad(PreLoadEvent @event)
{
if (// I check permission here)
{
int index = 0;
// Set values to null if user is not permitted
foreach (object obj in @event.State)
{
@event.State.SetValue(null, index);
index++;
}
}
}
Скажем, что-то вроде:
public class Employee {
private virtual int Id {get;set}
private virtual string Name {get;set;}
private virtual List<Document> Documents {get;set;}
}
public class Document {
private virtual int Id {get;set;};
private virtual byte[] Binary {get;set;}
}
Теперь я говорю, что для Documents
нет разрешений, а для остальных есть разрешения на чтение.
NHibernate теперь считает нулевые значения Documents
грязным объектом и сохраняет нулевые значения в базе данных.
У меня также есть пользовательские методы FindDirty () и PreFlush (), которые проверяют, является ли пользовательне допускается, а затем пометьте его как не грязный. НО кажется, что они не призваны на получение сущности.
Есть идеи?Благодаря.