我在这里找到了一些关于这个话题的答案,但它们并没有完全涵盖我的问题。
我的目标是使实体具有用户作为所有者。
public interface IMustHaveUser
{
long UserId { get; set; }
}
我在预初始化方法中的EFCoreModule中注册自定义过滤器
public override void PreInitialize() {
//Register custom data filters
Configuration.UnitOfWork.RegisterFilter("MustHaveUser", true);
//other code here...
}
定义一个属性,用于检查过滤器是否已启用
protected virtual bool IsMustHaveUserFilterEnabled => CurrentUnitOfWorkProvider?.Current?.IsFilterEnabled("MustHaveUser") == true;
并重写CreateFilterExpression方法。
protected override Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>()
{
var expression = base.CreateFilterExpression<TEntity>();
if (typeof(IMustHaveUser).IsAssignableFrom(typeof(TEntity)))
{
Expression<Func<TEntity, bool>> userFilter = e => ((IMustHaveUser) e).UserId == AbpSession.UserId || (((IMustHaveUser) e).UserId == AbpSession.UserId) == IsMustHaveUserFilterEnabled;
expression = expression == null ? userFilter : CombineExpressions(expression, userFilter);
}
return expression;
}
现在,当我创建实体时,我必须手动设置UserID。
void Create(Product product, UserIdentity user){
product.UserId = user.UserId;
//Other business rules and insert with repository
}
我的问题是如何设置当前用户ID。还有其他最简单(更好)的方法吗?