Ef Core 2 установить значение игнорируемого свойства во время выполнения - PullRequest
0 голосов
/ 31 мая 2018

У меня есть объект с логическим свойством с именем «ReadOnly», значение этого свойства зависит от того, какой пользователь использует приложение.

В DbContext я настроил свойство, которое будет игнорироваться.

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Entity>().Ignore(e => e.ReadOnly);
    }
}

Как я могу установить правильное значение, рассчитанное во время выполнения, чтобы мне не приходилось напоминать каждый раз при вычислении свойства?

РЕДАКТИРОВАТЬ: Я думал что-то вроде

int loggedUserId = HttpSession.UserId;
modelBuilder.Entity<Entity>().Property(e => e.ReadOnly).Value = loggedUserId > 5;

Таким образом, у меня всегда правильное значение, основанное на том, что пользователь вошел в приложение.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Я обнаружил, что AutoMapper имеет функцию ProjectTo, которая делает то, что мне нужно, ProjectTo скажет механизму отображения AutoMapper выдать предложение select для IQueryable

Пример моей конфигурации:

 configuration.CreateMap(typeof(Entity), typeof(Entity))
    .ForMember(nameof(Entity.IsReadOnly), opt.MapFrom(src => currentUserResolver.GetUserId() > 5));

Использование:

myDbSet.AsQueryable().ProjectTo<TEntity>();

http://docs.automapper.org/en/stable/Queryable-Extensions.html

0 голосов
/ 01 июня 2018

Вы можете попробовать использовать фильтр , но я не уверен, что он будет работать, так как вам нужно установить свойство для каждого запроса.Лучше всего сделать метод класса, который принимает пользователя и возвращает рассчитанное значение.Как то так:

bool IsReadOnly(int userId){
return userId > 5;
}
...