I am evaluating ServiceStack to find out if it works for the purpose of creating a general purpose REST server, and I am trying to extend the Northwind demo that I updated locally to use 4.0.44 ServiceStack. The code with my settings is on Bitbucket here , dumped from git to hg, and then from my own change .
The difference between my code and the previous version of serviceStack.Examples Northwind is the following additions:
A ... / date / The route has been added to the ServiceModel.Operations object for Orders:
namespace ServiceStack.Northwind.ServiceModel.Operations
{
...
[Route("/orders")]
[Route("/orders/date/{ByDate}")]
[Route("/orders/page/{Page}")]
[Route("/customers/{CustomerId}/orders")]
public class Orders
{
public int? Page { get; set; }
public DateTime? ByDate { get; set; }
public string CustomerId { get; set; }
}
Then a handler was added to the service for this case, which explodes at runtime with a weird LINQ crash: variable 'o' of type 'ServiceStack.Northwind.ServiceModel.Types.Order' referenced from scope '', but it is not defined...
Source = System.Core
namespace ServiceStack.Northwind.ServiceInterface
{
public class OrdersService : Service
{
private const int PageCount = 20;
public object Get(Orders request)
{
List<Order> orders = null;
if (request.ByDate.HasValue)
{
orders = Db.Select<Order>(order => order.Where<Order>(o => o.OrderDate.Value.Date == request.ByDate.Value.Date ));
}
else if (request.CustomerId.IsNullOrEmpty())
{
orders = Db.Select<Order>(order => order.OrderByDescending(o => o.OrderDate))
.Skip((request.Page.GetValueOrDefault(1) - 1) * PageCount)
.Take(PageCount)
.ToList();
}
else
{
orders = Db.Select<Order>(order => order.Where(o => o.CustomerId == request.CustomerId));
}
if (orders.Count == 0)
, , LINQ , ORM SQLite - .
Firebird, DateTime, ORMLite SQLite, Firebird.
System.InvalidOperationException was unhandled by user code
HResult = -2146233079
Message = variable 'o' of type 'ServiceStack.Northwind.ServiceModel.Types.Order' referenced from scope '', but it is not defined
Source = System.Core
StackTrace:
at System.Linq.Expressions.Compiler.VariableBinder.Reference(ParameterExpression node, VariableStorageKind storage)
at System.Linq.Expressions.Compiler.VariableBinder.VisitParameter(ParameterExpression node)
at System.Linq.Expressions.ParameterExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.VisitMember(MemberExpression node)
at System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.VisitMember(MemberExpression node)
at System.Linq.Expressions.MemberExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.Compiler.VariableBinder.VisitUnary(UnaryExpression node)
at System.Linq.Expressions.UnaryExpression.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.ExpressionVisitor.Visit(ReadOnlyCollection`1 nodes)
at System.Linq.Expressions.Compiler.VariableBinder.VisitLambda[T](Expression`1 node)
at System.Linq.Expressions.Expression`1.Accept(ExpressionVisitor visitor)
at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
at System.Linq.Expressions.Compiler.VariableBinder.Bind(LambdaExpression lambda)
at System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator)
at ServiceStack.OrmLite.SqlExpression`1.VisitMemberAccess(MemberExpression m)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitBinary(BinaryExpression b)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.VisitLambda(LambdaExpression lambda)
at ServiceStack.OrmLite.SqlExpression`1.Visit(Expression exp)
at ServiceStack.OrmLite.SqlExpression`1.AppendToWhere(String condition, Expression predicate)
at ServiceStack.OrmLite.SqlExpression`1.Where(Expression`1 predicate)
at ServiceStack.Northwind.ServiceInterface.OrdersService.Get(Orders request) in C:\dev\ServiceStack.Examples\src\ServiceStack.Northwind\ServiceStack.Northwind.ServiceInterface\OrdersService.cs:line 19
at lambda_method(Closure, Object, Object)
at ServiceStack.Host.ServiceRunner`1.Execute(IRequest request, Object instance, TRequest requestDto)
InnerException:
:
SQL where clause, :
if (request.ByDate.HasValue)
{
string condition = string.Format("OrderDate = '{0}'", request.ByDate.Value.Date.ToString("yyyy-MM-dd") );
orders = Db.Select<Order>(condition);