Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 自动映射不同类型的映射表达式_Asp.net Core_Automapper_Azure Cosmosdb_Azure Table Storage - Fatal编程技术网

Asp.net core 自动映射不同类型的映射表达式

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 {

我正试图在我的项目中开发一个通用存储库。 举个简单的例子,我的一个模型对象是“编辑器”。 我想允许一个“Find”方法将表达式作为搜索查询

我的存储库正在使用实体(下面表示为EditorTableEntity)将数据存储到Azure表中。 因此,我需要将表达式转换为:

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()