Zur Zeit wird gefiltert nach: efprovidertoolkit
Filter zurücksetzen

Entity Framework 4 - EfCachingProvider und die System.NotSupportedException: Command tree type System.Data.Common.CommandTrees. DbFunctionCommandTree is not supported bei Ausführung von gespeicherten Prozeduren

Ich habe die neue Version des EFProviderToolkits heruntergeladen. Bei der Ausführung von Prozeduren hatte auch die frühere Version Probleme. Wie ich es dennoch in den Griff bekommen habe, ist hier beschrieben.

Nun stand ich wieder an einer ähnlichen Stelle an. Der Code wurde überarbeitet, theoretisch lassen sich auch die gespeicherten Prozeduren ausführen. Theoretisch, denn der Caching Provider quittiert mir die Ausführung mit der Fehlermeldung:

System.NotSupportedException: Command tree type System.Data.Common.CommandTrees.DbFunctionCommandTree is not supported.

Bei der neuen Version tritt der Fehler jedoch in der Datei EFCommandDefinition.cs auf, also machte ich mich dort auf die Suche. Fündig wurde ich in der Methode GetAffectedEntitySets.

Dort werden die Tree-Kommandos geparst und der Visitor angeheftet. Die Methode DbFunctionCommandTree fehlt jedoch in dieser Methode und dadurch wird eine Ausnahme ausgelöst, die in Zeile 170 steht.

Also habe ich in der Methode diesen Part hinzugefügt und konnte so das Problem in den Griff bekommen. Da ich in diesem Projekt nur gespeicherte Prozeduren ohne Rückgabewert aufrufe, bleibt die Basisfunktionalität des Caching Providers erhalten.

Die angepasste Methode im Projekt EFCachingProivder sieht wie folgt aus:


        private void GetAffectedEntitySets(DbCommandTree commandTree)
        {
            FindAffectedEntitySetsVisitor visitor = new FindAffectedEntitySetsVisitor(this.affectedEntitySets, this.functionsUsed);
            DbQueryCommandTree queryTree = commandTree as DbQueryCommandTree;
            if (queryTree != null)
            {
                queryTree.Query.Accept(visitor);
                return;
            }

            DbUpdateCommandTree updateTree = commandTree as DbUpdateCommandTree;
            if (updateTree != null)
            {
                this.IsModification = true;
                updateTree.Target.Expression.Accept(visitor);
                updateTree.Predicate.Accept(visitor);
                if (updateTree.Returning != null)
                {
                    updateTree.Returning.Accept(visitor);
                }

                return;
            }

            DbInsertCommandTree insertTree = commandTree as DbInsertCommandTree;
            if (insertTree != null)
            {
                this.IsModification = true;
                insertTree.Target.Expression.Accept(visitor);
                if (insertTree.Returning != null)
                {
                    insertTree.Returning.Accept(visitor);
                }

                return;
            }

            DbDeleteCommandTree deleteTree = commandTree as DbDeleteCommandTree;
            if (deleteTree != null)
            {
                this.IsModification = true;
                deleteTree.Target.Expression.Accept(visitor);
                if (deleteTree.Predicate != null)
                {
                    deleteTree.Predicate.Accept(visitor);
                }

                return;
            }

            // Modification for store procedures support without caching
            DbFunctionCommandTree funcTree = commandTree as DbFunctionCommandTree;
            if (funcTree != null)
            {
              return;
            }

            throw new NotSupportedException("Command tree type " + commandTree.GetType() + " is not supported.");
        }

Second Level Cache ist in manchen Situationen schon sehr hilfreich und die Ecken und Kanten in diesem Toolkit lassen sich immer noch anpassen. ;-)

Zurück

Translate this page

Kategorien

  • [-].NET Development (215)
  • [-]Datenbank (26)
  • HTML (1)
  • Konfiguration (12)
  • Mind Map (10)
  • Off-topic (9)
  • Open Source (3)
  • Qualität (7)
  • Sharepoint (6)
  • Sicherheit (2)

Archiv

Social Bookmarking

Bookmark bei: Mr. Wong Bookmark bei: Webnews Bookmark bei: Icio Bookmark bei: Oneview Bookmark bei: Linkarena Bookmark bei: Favoriten Bookmark bei: Seekxl Bookmark bei: Favit Bookmark bei: Social Bookmarking Tool Bookmark bei: Power Oldie Bookmark bei: Bookmarks.cc Bookmark bei: Newskick Bookmark bei: Newsider Bookmark bei: Linksilo Bookmark bei: Readster Bookmark bei: Folkd Bookmark bei: Yigg Bookmark bei: Digg Bookmark bei: Del.icio.us Bookmark bei: Reddit Bookmark bei: Simpy Bookmark bei: StumbleUpon Bookmark bei: Slashdot Bookmark bei: Netscape Bookmark bei: Furl Bookmark bei: Yahoo Bookmark bei: Spurl Bookmark bei: Google Bookmark bei: Blinklist Bookmark bei: Blogmarks Bookmark bei: Diigo Bookmark bei: Technorati Bookmark bei: Newsvine Bookmark bei: Blinkbits Bookmark bei: Ma.Gnolia Bookmark bei: Smarking Bookmark bei: Netvouz Information