Mon EF 4.3.1 modèle a 200 et quelques tables. Démarrage Initial est horrible, plusieurs minutes. Un DotTrace-capturé profil implique une certaine terrible algorithme/évolutivité des choix profondément dans le cadre, comme en témoignent les millions d'appels à un certain nombre de méthodes là-bas et les 36 millions de IEnumerable.Contient() appelle. Voici un extrait de code, tout est déclenché par la première requête effectuée sur la base de données (futures requêtes ne faites pas cela et sont très bien).
Que puis-je faire pour mon modèle pour le rendre moins douloureux? Puis-je précompiler ce en quelque sorte? Mieux, l'équipe EF veuillez répondre à ces questions ou open source le cadre donc, je peux? Ou au moins de corriger l'orthographe de l' Warapper
? :)
EDIT: Un EF appel qui déclenche ce est fondamentalement var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault();
. Aussi un EF Migrations de Semences() AddOrUpdate génère en effet de la même pile. Le plus complet que la trace de la pile, ce qui peut donner un peu plus de contexte, c'est ici: Fuller Trace de la Pile
EDIT: Quelques liens pertinents:
- MSDN: facteurs de Performance (Entity Framework) (merci à @AakashM)
- MSDN: EF Outils électriques
- DONC: Entity Framework 4.1 pour un grand nombre de tables (715)
EDIT2: Maintenant que l'on vient de open source le code, il semble que cette ligne:
//Filter the 1:1 foreign key associations to the ones relating the sets used in these cell wrappers.
oneToOneForeignKeyAssociationsForThisWrapper =
oneToOneForeignKeyAssociationsForThisWrapper.Where(
it => (it.AssociationEndMembers.All(endMember => entityTypes.Contains(endMember.GetEntityType()))));
est celui qui a besoin de quelques travaux. C'est à l'aide d'un O(n^2) algorithme lorsqu'il n'a sans doute pas, mais je n'ai pas regardé de plus près encore.
EDIT3: Heureusement, il ressemble à un travail en EF6 est la fixation de ce code: http://entityframework.codeplex.com/discussions/396130