none
Wie kann ich den EF-Cache abschalten? RRS feed

  • Frage

  • Hallo,

    ich habe das Problem, dass die Daten meines Entity-Objektes nicht aktuell sind.
    Zur Veranschaulichung habe ich folgendes Minni-Projekt:

    Meine Tabelle auf dem SQL-Server:

    CREATE TABLE [dbo].[MyTestTable](
    	[Key] [int] NOT NULL,
    	[Value] [int] NULL,
     CONSTRAINT [PK_MyTestTable] PRIMARY KEY CLUSTERED 
    (
    	[Key] ASC
    ) ON [PRIMARY]
    ) ON [PRIMARY]
    
    Da stehen folgende Werte drin:
    Key | Value
    1 | 20
    2 | 30

    Mein Programmcode sieht folgendermassen aus:
    static void Main(string[] args)
    {
        sinfonieDBEntities snfEntities = new sinfonieDBEntities();
    
        for (int i = 0; i < 5; i++)
        {
            var data = (from c in snfEntities.MyTestTable
                             select c).ToList();
    
            Console.WriteLine("\n");
            foreach (var d in data)
            {
              Console.WriteLine("Key=" + d.Key + "  Value=\"" + d.Value);
            }
            Thread.Sleep(10000);
        }
    }
    
    Nun tritt folgendes Problem auf:
    Während das Programm läuft, ändere ich den Wert von Value=30 auf Value=40, aber das EF scheint das überhaupt nicht mitzubekommen.
    Nur wenn ich den Key ändere wird es auch im nächsten Schleifendurchlauf sofort angezeigt.
    Der veränderte Wert der Value Spalte wird aber erst angezeigt, wenn ich das Programm beende und neu Starte.

    Wie kann ich erreichen, dass auch der veränderte Wert der Value-Spalte beim nächsten Schleifendurchlauf angezeigt wird?

    Vielen Dank im Voraus,
    glibber
    Freitag, 8. Januar 2010 17:01

Antworten

  • Hallo,

    das Verhalten kannst Du wohl über MergeOption beeinflussen. Eine nähere Beschreibung findest hier:

    Entity Framework Problems: Retrieving cached values instead of recent changes
    http://forums.asp.net/t/1363040.aspx

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    • Als Antwort markiert glibber Freitag, 8. Januar 2010 23:35
    Freitag, 8. Januar 2010 22:14
    Beantworter

Alle Antworten

  • Hallo,

    das Verhalten kannst Du wohl über MergeOption beeinflussen. Eine nähere Beschreibung findest hier:

    Entity Framework Problems: Retrieving cached values instead of recent changes
    http://forums.asp.net/t/1363040.aspx

    Thorsten Dörfler
    Microsoft MVP Visual Basic
    • Als Antwort markiert glibber Freitag, 8. Januar 2010 23:35
    Freitag, 8. Januar 2010 22:14
    Beantworter
  • Hallo Thorsten,

    vielen Dank für die superschnelle Antwort.
    Das war ganau das was ich brauchte.
    Das Zauberwort heisst:
            static void Main(string[] args)
            {
                sinfonieDBEntities snfEntities = new sinfonieDBEntities();
    
                // Dies bewirkt das die Daten jedesmal aus der DB geladen werden:
                snfEntities.MyTestTable.MergeOption = System.Data.Objects.MergeOption.PreserveChanges;
    
    ...
    Liebe Grüße,
    glibber
    Freitag, 8. Januar 2010 23:34