J'utilise des objets POCO dans EF 4 sans aucune génération de modèle T4.requête compilée seuls les paramètres scalaires sont autorisés!
J'ai une classe DataContext qui encapsule tous ObjectSets, quelque chose comme ça
public sealed class DataContext :IDisposable
{
public IObjectSet GetObjectSet() where T : MyBase
{
object objectSet = null;
this.objectSets.TryGetValue(typeof(T), out objectSet);
if (objectSet == null)
{
objectSet = this.context.CreateObjectSet();
this.objectSets.Add(typeof(T), objectSet);
}
return (IObjectSet)objectSet;
}
public ObjectContext ObjectContext
{
get
{
return this.context;
}
}
}
Quand j'ÉCRIRE compilé requête et essayer de passer dans cette classe comme l'un des paramètres, il me donne une erreur d'exécution en disant que les paramètres scalaires sont autorisés
static readonly Func<ObjectContext , DataContext, string, int?> getOperationByOrchestrationName
= CompiledQuery.Compile(
(ObjectContext ctx, DataContext container, string name) =>
(from or in container.GetObjectSet<MyOrClass>()
join op in container.GetObjectSet<MyOpClass>()
on or.Id equals op.Id
where op.Name == name
select op.Id).FirstOrDefault()
);
Si je modifie la requête comme cela, il fonctionne, mais je soupçonne profondément sa confection, chaque fois, depuis que je ne suis pas voir l'amélioration des performances, je voudrais voir à partir d'une requête compilée, peut quelqu'un souligne ce qui se passe sur?
static readonly Func, IObjectSet, string, IQueryable>
getOperationByOrchestrationName
= CompiledQuery.Compile(
(ObjectContext ctx, IObjectSet ors, IObjectSet ops,string operationName) =>
from or in ors
join op in ops
on or.Id equals op.Id
where op.Name == name
select op.Id
);