我有几个ServiceStack ORMLite POCO,一个是下面的公司。
public class Company
{
[AutoIncrement]
public int id { get; set; }
public string company { get; set; }
public int? companyNo { get; set; }
public bool? active { get; set; }
}
如果以下请求中有两个属性有效:req.company =“ABC Company”,req.active = ture,所有其他属性为null。然后它可以返回与这两个属性匹配的所有记录。代码可能如下所示:
public object Get(Company req)
{
return Db.Select<Company>().Where<Company>(req);
}
ServiceStack ORMLite是否有这样的WHRER来自动匹配请求DTO中的有效属性?
答案 0 :(得分:0)
这不是OrmLite中的一项功能,但它可以在AutoQuery中使用,您只需要定义要查询的请求DTO,例如:
[Route("/company/search")]
public class QueryCompany : IQuery<Company>
{
public int Id { get; set; }
public string Company { get; set; }
public int? CompanyNo { get; set; }
public bool? Active { get; set; }
}
只需使用Request DTO,ServiceStack就会自动为您创建服务,您可以像任何其他服务一样进行查询。
您可以通过注册AutoQuery功能启用AutoQuery,例如:
Plugins.Add(new AutoQueryFeature { MaxLimit = 100 });
ServiceStack.Server NuGet包中提供了AutoQuery:
PM> Install-Package ServiceStack.Server
答案 1 :(得分:0)
谢谢mythz。这个对我有用。我的代码如下:
// ====== Model.cs ========
[Route("/company/search")]
public class QueryableCompany : QueryBase<Company>
{
public int? Id { get; set; }
public string Company { get; set; }
public int? CompanyNo { get; set; }
public bool? Active { get; set; }
}
public class Company
{
[AutoIncrement]
public int id { get; set; }
public string company { get; set; }
public int companyNo { get; set; }
public bool active { get; set; }
}
// ====== Service.cs ========
public IAutoQuery AutoQuery { get; set; }
public object Get(QueryableCompanies dto)
{
var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());
var r = AutoQuery.Execute(dto, q);
return r.Results;
}
// ====== Global.asax.cs ========
public override void Configure(Container container)
{
//...
Plugins.Add(new AutoQueryFeature { MaxLimit = 100 });
//...
}
然后,根据上面的代码我还有两个问题。
1)由于我有很多请求DTO,他们在Get(QueryableXXX dto)中的代码都是一样的;如何使用单个通用Get()方法返回所有不同类型的DTO,如:
public object Get<T>(T dto) where T : IQuery
{
var q = AutoQuery.CreateQuery(dto, Request.GetRequestParams());
return AutoQuery.Execute(dto, q).Results;
}
2)在上面的公司示例中,类QueryableCompany看起来与类公司类似,AutoQuery是否可以为类公司的成员提供一些属性,并避免创建另一个类似的QueryableCompany?