This Linq
var passiveAccounts = (from account in Session.Current.Query.All<PassiveAccount>()
select new PassiveAccountEis
{
AccountOwner = account.AccountOwner.Id,
Id = account.Id,
Name = account.Name,
Number = account.Number,
Portfolio = account.Portfolio != null ? (Guid?)account.Portfolio.Id : null,
ShortDepositorName = account.ShortDepositorName,
Status = account.Status.Id
}).ToList();
is translated to query:
SELECT [a].[Id] ,
[a].[Status_Id] ,
[a].[FullName] ,
[a].[Name] ,
[a].[Fund_Id] ,
[a].[ManagementCompany_Id]
FROM [dbo].[Portfolio] [a]
But this
var passiveAccounts = (from account in Session.Current.Query.All<PassiveAccount>()
.Prefetch(a => a.Status)
.Prefetch(a => a.AccountOwner)
.Prefetch(a => a.Portfolio)
select Mapper.Map<PassiveAccount, PassiveAccountEis>(account)).ToList();
is translated to many queries.
Three sql query on Status, AccountOwner, Portfolio for each record in PassiveAccount.
Here is a configuration of Entity to Guid mapping:
private sealed class EntityBaseToGuidConverter : ITypeConverter<EntityBase, Guid>
{
private const string EntityIsNull = "Не задана сущность для преобразования в Guid";
public Guid Convert(EntityBase source)
{
if (source == null)
{
throw new InvalidOperationException(EntityIsNull);
}
return source.Id;
}
}
private sealed class EntityBaseToNullableGuidConverter : ITypeConverter<EntityBase, Guid?>
{
public Guid? Convert(EntityBase source)
{
return source != null ? (Guid?)source.Id : null;
}
}
why is it so?