在 ServiceStack 中使用 AutoQuery 时转换失败
Conversion failed,when using AutoQuery in ServiceStack
我有以下自动查询功能。
[Route("/cars/search")]
public class SearchCars : QueryDb<Car, CarDto>
{
public List<int> EquipmentIds { get; set; }
public List<int> ManufacturerIds { get; set; }
public List<int> ColourIds { get; set; }
}
当我执行以下操作时,该功能有效:
Cars/Search?ColourIds=1&format=json
Cars/Search?ManufacturerIds=1&format=json
但是当我尝试使用
Cars/Search?EquipmentIds=1&format=json
我得到 "Conversion failed when converting the varchar value '[1]' to data type int."。
这些字段的区别在于Car对象可以有多个EquipmentIds,但只有一个ColourId和ManufacturerId。
public class Car
{
[AutoIncrement]
public int Id { get; set; }
public Colour Colour { get; set; }
[Required]
public int ColourId { get; set; }
public Manufacturer Manufacturer { get; set; }
[Required]
public int ManufacturerId { get; set; }
[Required]
public List<Equipment> Equipment { get; set; }
[Required]
public List<int> EquipmentId { get; set; }
}
我是否必须定义不同参数也应该分配给哪个属性?
AutoQuery works by constructing an RDBMS query based on implicit conventions 用于构建在 RDBMS 上运行的 SQL 查询。
默认情况下,OrmLite 数据模型中的复杂类型是斑点化的,这意味着它们无法在 RDBMS 中使用 SQL 进行查询,因此您将无法使用 AutoQuery 进行查询。
您可以创建一个混合 Custom AutoQuery Implementation,您可以在其中应用任何自定义逻辑来过滤 AutoQuery 结果的结果,例如...
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
//Override with custom implementation
public object Any(SearchCars query)
{
var equipmentIds = query.EquipmentIds;
query.EquipmentIds = null;
var q = AutoQuery.CreateQuery(query, base.Request);
var response = AutoQuery.Execute(query, q);
if (equipmentIds != null)
response.Results.RemoveAll(x => x.EquipmentId...);
return response.
}
}
我有以下自动查询功能。
[Route("/cars/search")]
public class SearchCars : QueryDb<Car, CarDto>
{
public List<int> EquipmentIds { get; set; }
public List<int> ManufacturerIds { get; set; }
public List<int> ColourIds { get; set; }
}
当我执行以下操作时,该功能有效:
Cars/Search?ColourIds=1&format=json
Cars/Search?ManufacturerIds=1&format=json
但是当我尝试使用
Cars/Search?EquipmentIds=1&format=json
我得到 "Conversion failed when converting the varchar value '[1]' to data type int."。
这些字段的区别在于Car对象可以有多个EquipmentIds,但只有一个ColourId和ManufacturerId。
public class Car
{
[AutoIncrement]
public int Id { get; set; }
public Colour Colour { get; set; }
[Required]
public int ColourId { get; set; }
public Manufacturer Manufacturer { get; set; }
[Required]
public int ManufacturerId { get; set; }
[Required]
public List<Equipment> Equipment { get; set; }
[Required]
public List<int> EquipmentId { get; set; }
}
我是否必须定义不同参数也应该分配给哪个属性?
AutoQuery works by constructing an RDBMS query based on implicit conventions 用于构建在 RDBMS 上运行的 SQL 查询。
默认情况下,OrmLite 数据模型中的复杂类型是斑点化的,这意味着它们无法在 RDBMS 中使用 SQL 进行查询,因此您将无法使用 AutoQuery 进行查询。
您可以创建一个混合 Custom AutoQuery Implementation,您可以在其中应用任何自定义逻辑来过滤 AutoQuery 结果的结果,例如...
public class MyQueryServices : Service
{
public IAutoQueryDb AutoQuery { get; set; }
//Override with custom implementation
public object Any(SearchCars query)
{
var equipmentIds = query.EquipmentIds;
query.EquipmentIds = null;
var q = AutoQuery.CreateQuery(query, base.Request);
var response = AutoQuery.Execute(query, q);
if (equipmentIds != null)
response.Results.RemoveAll(x => x.EquipmentId...);
return response.
}
}