Ef Core 2在运行时将值设置为ignored属性

时间:2018-05-31 15:18:18

标签: c# .net-core ef-core-2.0

我有一个名为“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 :(得分:0)

您可以尝试使用filter,但我不确定它是否有效,因为您需要为每个请求设置属性。最好的办法就是在接受用户的类上创建一个方法并返回计算出的值。像这样:

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

答案 1 :(得分:0)

我发现AutoMapper有ProjectTo功能可以满足我的需要,ProjectTo会告诉AutoMapper的映射引擎向IQueryable发出一个select子句

我的配置示例:

 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