Question

Lors de l'utilisation d'Entity Framework, ne ESQL faire mieux que Linq to entities?

Je préfère utiliser Linq to entities (principalement en raison de la forte-type de vérification), mais certains de mes autres membres de l'équipe sont en citant la performance comme une raison d'utiliser ESQL.Je voudrais avoir une idée de la pro/con d'utiliser soit la méthode.

Était-ce utile?

La solution

La plupart des différences évidentes sont:

Linq to entities est fortement typé code de nice requête de compréhension de la syntaxe.Le fait que le “de” qui vient avant le “select” permet d'IntelliSense pour vous aider.

Entity SQL utilise traditionnelle chaîne de caractères en fonction des requêtes plus familier SQL syntaxe où l'instruction SELECT vient avant la PARTIR de.Parce que eSQL est la chaîne de caractères en fonction, de requêtes dynamiques peuvent être composées de façon traditionnelle au moment de l'exécution à l'aide de la manipulation de la chaîne.

Ce qui est moins évident différence essentielle est:

Linq to entities permet de modifier la forme ou le "projet" les résultats de votre requête dans n'importe quelle forme vous avez besoin avec le “select new{...} syntaxe”.Les types anonymes, les nouvelles de C# 3.0, a permis cela.

La Projection n'est pas possible à l'aide de Entity SQL que vous devez toujours revenir un ObjectQuery<T>.Dans certains scénarios, il est possible d'utiliser ObjectQuery<object> cependant, vous devez contourner le fait que .Sélectionnez retourne toujours ObjectQuery<DbDataRecord>.Voir le code ci-dessous...

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

Il existe d'autres différences subtiles décrit par l'un des membres de l'équipe dans le détail ici et ici.

Autres conseils

ESQL peut également générer certains particulièrement vicieux sql.J'ai dû suivre un problème avec une requête qui a été en utilisant les classes héritées et j'ai découvert que mon pidly-peu ESQL de 4 lignes s'est traduit dans un de 100000 caractères monstre SQL statetement.

Fait la même chose avec Linq et le code compilé est beaucoup plus gérable, disons 20 lignes de code SQL.

De Plus, ce que les autres personnes mentionnées, Linq est fortement type, bien que très gênant pour déboguer sans le modifier et continuer de fonctionnalité.

AD

Entité-SQL (eSQL) vous permet de faire des choses telles que les requêtes dynamiques plus facilement que LINQ to entities.Toutefois, si vous ne disposez pas d'un scénario qui nécessite eSQL, j'hésite à s'appuyer sur LINQ, car il sera beaucoup plus difficile à maintenir (par ex.pas plus au moment de la compilation de la vérification, etc).

Je crois que LINQ permet de précompiler vos requêtes, ce qui pourrait vous donner une meilleure performance.Rico Mariani blogué sur LINQ performance a tout à l'arrière et traite les requêtes compilées.

nice graphique montrant les comparaisons de performances ici: Entity Framework Performance Exploré pas beaucoup de différence observée entre les ESQL et Entités mais, dans l'ensemble des différences significatives dans l'utilisation des Entités de plus de diriger les Requêtes

Entity Framework utilise deux couches de mappage d'objets (par rapport à une seule couche dans LINQ to SQL), et de la cartographie de la performance des coûts.Au moins en EF version 1, les concepteurs d'applications doit choisir Entity Framework seulement si la modélisation et mapping ORM capacités peuvent justifier que le coût.

Plus de code que vous pouvez couvrir avec le moment de la compilation, de vérification pour moi, c'est quelque chose que j'avais en place une prime plus élevée sur les performances.Ayant dit que, à ce stade, je serais probablement pencher vers ESQL pas seulement en raison de la performance, mais c'est aussi (à l'heure actuelle) beaucoup plus souple en ce qu'il peut faire.Il n'y a rien de pire que d'utiliser une technologie de pile qui n'a pas une fonctionnalité que vous vraiment besoin.

Entity framework ne prend pas en charge les choses comme les propriétés personnalisées, des requêtes personnalisées (pour quand vous avez besoin pour vraiment optimiser les performances) et de ne pas fonctionner de la même manière que linq-to-sql (c'est à direil y a des fonctionnalités qui ne fonctionnent simplement pas dans le cadre de l'entité).

Mon impression personnelle de l'Entity Framework est qu'il y a beaucoup de potentiel, mais c'est probablement un peu "rigide" dans la mise en oeuvre de l'utiliser dans un environnement de production dans son état actuel.

Pour diriger les requêtes que je suis en utilisant linq to entities, pour les requêtes dynamiques, je suis en utilisant ESQL.Peut-être que la réponse n'est pas/ou l'autre, mais et/aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top