Hello Together,

In production we are using Sql Server 2008 Express R2. To enable
testing of our queries etc. we are using Sql Compact 4.0 in our
continuously running tests. We wrote some customization to support
DateTimeOffset for Sql Compact edition. But the rest is kept at its
defaults. This worked very nice until we introduced subqueries and
inheritance hierarchies. The following issue occurs:

Lets say we have
public class Person { public virtual Name { get; set; } }
public class Employee : Person { }
public class ExEmployee: Person { }

when we want to write a query which returns the count of employees and
the count of exemployees the compact server explodes when we write it
with futures or subqueries:

            Person person = null;
            PersonDTO personDTO = null;

            var employeeCount = session.QueryOver<Employee>()
                .Where(t => t.Company.Id == this.companyId)
                .Select(Projections.RowCount())
                .FutureValue<int>();

            var exEmployeeCount = session.QueryOver<ExEmployee>()
                .Where(t => t.Company.Id == this.companyId)
                .Select(Projections.RowCount())
                .FutureValue<int>();

            return session.QueryOver(() => orderAlias)
                .Where(o => o.Id == this.orderId)
                .Select(
 
Projections.Constant(employeeCount.Value).WithAlias(() =>
personDTO .NumberOfEmployees),
 
Projections.Constant(exEmployeeCount.Value).WithAlias(() => personDTO
NumberOfExEmployees),
                    ...)
                .TransformUsing(Transformers.AliasToBean<PersonDTO
>())
                .SingleOrDefault<PersonDTO >();

or

var employeeCount = QueryOver.Of<Employee>()
     .Where(w => w.Company.Id == this.companyId)
     .Select(Projections.RowCount()));

var exEmployeeCount = QueryOver.Of<ExEmployee>()
     .Where(w => w.Company.Id == this.companyId)
     .Select(Projections.RowCount()));

return session.QueryOver(() => person)
    .Select(
Projections.SubQuery(employeeCount ).WithAlias(() =>
personDTO.NumberOfEmployees),
Projections.SubQuery(exEmployeeCount ).WithAlias(() =>
personDTO.NumberOfExEmployees))
TransformUsing(Transformers.AliasToBean<PersonDTO>())
Future<PersonDTO>();

We get a SqlCe parse exception with either cannot create multicriteria
(in case of futures) or SqlCe exception with only parse exception.

The only solution we have so far is to write three queries without
futures or subqueries. Any suggestions how could overcome this issue
without moving away from SqlCompact to SqlServer in our tests?

Daniel

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to