Mam prostą aplikację konsolową używającą SQL Compact 4.0 i frameworki encji 4. Baza danych ma pojedynczą tabelę o nazwie Section, która ma trzy kolumny: Id (StoreGeneratedPattern: Identity, Type: Int32)< /em>, Title (Typ: ciąg) i TimeStamp (StoreGeneratedPattern: Computed, ConcurrencyMode: Fixed, Type: Binary, MaxLength: 8). Kolumna TimeStamp jest w rzeczywistości typem rowversion w programie SQL Compact.

W main mam następujący kod:

Section section = new Section();
section.Title = "Hello";

using (Entities1 context = new Entities1())
{
    context.Sections.AddObject(section);                
    context.SaveChanges();

    section.Title = "Changed";
    context.SaveChanges();
}

Ten kod zgłasza wyjątek współbieżności, ponieważ kolumna TimeStamp nie jest aktualizowana z bazy danych po pierwszej metodzie SaveChanges(). Zauważ, że działa dobrze w SQLServer2008.

Czy to błąd w Compact, czy czegoś mi brakuje?

Dzięki,

Darren.

1
Darren 11 lipiec 2011, 22:17

3 odpowiedzi

Najlepsza odpowiedź

Znalazłem problem. Okazuje się, że jest to błąd w projektancie edmx, w którym właściwość StoreGeneratedPattern nie jest zapisywana w bazowym pliku xml. Jest zapisany tylko w części CSDL, ale nie w części SSDL Zobacz http://www.ladislavmrnka.com/2011/03/the-bug-in-storegeneratedpattern-fixed-in-vs-2010-sp1/ Zauważ, że w tym blogu mówi, że jest naprawiony w VS2010 SP1, cóż, mam tę wersję i nie jest naprawiony w mojej!

Wpisanie go ręcznie do pliku xml rozwiązało problem. Niestety kolejne zmiany ponownie go usuwają.

Darren.

0
Darren 13 lipiec 2011, 03:45

Może: context.Refresh(System.Data.Objects.RefreshMode.ClientWins, sekcja); po pierwszym SaveChanges

0
ErikEJ 11 lipiec 2011, 23:06