我有一个名为“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;
这样我总是根据用户登录到应用程序的正确值。
答案 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