Объявите объект как не грязный в NHibernate - PullRequest
0 голосов
/ 20 июня 2019

Есть много сообщений о том, как это сделать, но ни один из них не может решить мою проблему.

У меня есть 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 (), которые проверяют, является ли пользовательне допускается, а затем пометьте его как не грязный. НО кажется, что они не призваны на получение сущности.

Есть идеи?Благодаря.

1 Ответ

0 голосов
/ 25 июня 2019

Маркировка объекта как доступного только для чтения может помочь.Но, пожалуйста, рассмотрите возможность принять совет @ AmitJoshi

public void OnPreLoad(PreLoadEvent @event)
{
    if (/* 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++;
        }

        @event.Session.SetReadOnly(@event.Entity, true); 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...