受到希望能够在 EF 查询中使用枚举的启发,我正在考虑将 ExpressionVisitor 添加到我的存储库中,该存储库将采用传入的标准/规范标准并重写它们以使用相应的持久化 int 属性。
我一直在我的(代码优先)实体中使用以下值后缀模式:
public class User : IEntity
{
public long ID { get; set; }
internal int MemberStatusValue { get; set; }
public MemberStatus MemberStatus
{
get { return (MemberStatus) MemberStatusValue; }
set { MemberStatusValue = (int) value; }
}
}
并使用以下命令将其映射到数据库:
internal class UserMapping : AbstractMappingProvider<User>
{
public override void DefineModel( DbModelBuilder modelBuilder )
{
// adds ToTable and other general mappings
base.DefineModel( modelBuilder );
Map.Property( e => e.MemberStatusValue ).HasColumnName( "MemberStatus" );
}
}
在我的存储库中,我有以下方法:
public IQueryable<T> Query( Expression<Func<T, bool>> filter, params string[] children )
{
if( children == null || children.Length == 0 )
{
return Objects.Where( filter );
}
DbQuery<T> query = children.Aggregate<string, DbQuery<T>>( Objects, ( current, child ) => current.Include( child ) );
return filter != null ? query.Where( filter ) : query;
}
我想在此方法中添加一个方法调用来重写过滤器表达式,将所有对 MemberStatus 属性的引用替换为对 MemberStatusValue 的引用。
我想这将是一个解决方案,涉及类似于在这个 SO post 中看到的内容,但我不确定如何从想法到实现。
如果您可以就添加此功能的潜在性能影响提供任何建议,我们也将不胜感激。