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.
3 odpowiedzi
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.
Może: context.Refresh(System.Data.Objects.RefreshMode.ClientWins, sekcja); po pierwszym SaveChanges
Brzmi jak nieobsługiwana funkcja w EF w połączeniu z SQL CE. Może to da trochę więcej wglądu:
EF / SQL CE / Automatycznie generowane klucze podstawowe
Ale to< /a> jeden mówi wszystko:
Lexis, Znany problem 4.1.1, o którym mówisz, spowoduje problemy tylko wtedy, gdy spróbujesz wykonać operacje DML na tabeli z kolumną Tożsamość lub Rowversion. Pod względem Select Statements nie ma problemu, wszystko powinno działać. Jeśli potrzebujesz mieć w swojej aplikacji instrukcje DML względem SQLCE, nie powinieneś mieć kolumn Identity i Rowerversion w schemacie. Reszta wszystko będzie działać poprawnie, a Entity Framework doda dane za Ciebie. Jeśli po tym wystąpią jakiekolwiek problemy, daj mi znać, chętnie pomogę. Pozdrawiam Ravi Tandon.
Jest gdzieś pod komentarzami pod postem. Gdzie DML oznacza język manipulacji danymi (czytaj: Wstaw/Aktualizuj/Usuń).
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.