Asp.net core 自动映射不同类型的映射表达式
我正试图在我的项目中开发一个通用存储库。 举个简单的例子,我的一个模型对象是“编辑器”。 我想允许一个“Find”方法将表达式作为搜索查询 我的存储库正在使用实体(下面表示为EditorTableEntity)将数据存储到Azure表中。 因此,我需要将表达式转换为:Asp.net core 自动映射不同类型的映射表达式,asp.net-core,automapper,azure-cosmosdb,azure-table-storage,Asp.net Core,Automapper,Azure Cosmosdb,Azure Table Storage,我正试图在我的项目中开发一个通用存储库。 举个简单的例子,我的一个模型对象是“编辑器”。 我想允许一个“Find”方法将表达式作为搜索查询 我的存储库正在使用实体(下面表示为EditorTableEntity)将数据存储到Azure表中。 因此,我需要将表达式转换为: Expression<Func<Editor, bool>> 我的EditorTableEntity类: public class EditorTableEntity : TableEntity {
Expression<Func<Editor, bool>>
我的EditorTableEntity类:
public class EditorTableEntity : TableEntity
{
public EditorTableEntity()
{
PartitionKey = PersistenceConstants.EditorTablePartitionKey;
}
public string Name { get; set; }
}
TableEntity基类有两个必需的属性“PartitionKey”和“RowKey”,类型为string
要在编辑器和EditorTableEntity之间进行映射,我使用AutoMapper和MapExpression扩展
我的映射配置文件:
public class EditorProfile : Profile
{
public EditorProfile()
{
CreateMap<EditorTableEntity, Editor>()
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.Parse(src.RowKey)))
.ReverseMap()
.ForMember(dest => dest.RowKey, opt => opt.MapFrom(src => src.Id.ToString()));
}
}
公共类编辑器配置文件:配置文件
{
公共编辑档案()
{
CreateMap()
.ForMember(dest=>dest.Id,opt=>opt.MapFrom(src=>Guid.Parse(src.RowKey)))
.ReverseMap()
.ForMember(dest=>dest.RowKey,opt=>opt.MapFrom(src=>src.Id.ToString());
}
}
问题是映射的谓词看起来像:
.Call System.Guid.Parse($e.RowKey) == .Constant<System.Guid>(91321197-9691-4e18-8984-3d12ee086218)
.Call System.Guid.Parse($e.RowKey)=常数(91321197-9691-4e18-8984-3d12ee086218)
Cosmos SDK不允许表达式包含解析方法(出现异常)
我的存储库查找方法:
public async Task<ICollection<Editor>> FindAsync(Expression<Func<Editor, bool>> predicate)
{
var converted = AutoMapper.MapExpression<Expression<Func<EditorTableEntity, bool>>>(predicate);
ICollection<EditorTableEntity> result = await AzureRepository.QueryAsync(converted);
return AutoMapper.Map<ICollection<Editor>>(result);
}
公共异步任务FindAsync(表达式谓词)
{
var converted=AutoMapper.MapExpression(谓词);
ICollection result=await AzureRepository.QueryAsync(已转换);
返回AutoMapper.Map(结果);
}
AzureRepository类只是围绕Cosmos table SDK包装的一个基本类,正在从表达式执行TableQuery
因此,我想将我的表达式映射如下:
$e.RowKey == .Constant<System.Guid>(91321197-9691-4e18-8984-3d12ee086218).ToString()
$e.RowKey==.Constant(91321197-9691-4e18-8984-3d12ee086218).ToString()
AutoMapper正在将表达式映射为检查Guid相等,我想将其配置为检查字符串相等。我该怎么做?有没有更好的方法来实现这一点
需要帮助请:)
public async Task<ICollection<Editor>> FindAsync(Expression<Func<Editor, bool>> predicate)
{
var converted = AutoMapper.MapExpression<Expression<Func<EditorTableEntity, bool>>>(predicate);
ICollection<EditorTableEntity> result = await AzureRepository.QueryAsync(converted);
return AutoMapper.Map<ICollection<Editor>>(result);
}
$e.RowKey == .Constant<System.Guid>(91321197-9691-4e18-8984-3d12ee086218).ToString()