Jednym z najbardziej rozpowszechnionych błędów związanych z aplikacjami na WP7 korzystającymi z bazy danych jest błąd inicjowania tabel. Objawiał się on informacją o nieistniejących tabelach w momencie gdy przy tworzeniu bazy nie zostały do niej dodane żadne wpisy. Okazuje się, że po zainstalowaniu aktualizacji WP 7.1.1 błędu tego nie udało mi się już zreprodukować. Tak to jest, gdy posty zalegają w kolejce i nie zawsze jest czas, żeby na spokojnie je opisać :)

Niemniej jednak – jeżeli tworzymy bazę danych warto do niej dodać przykładowy wpis (najlepiej do dodatkowej, fakeowej tabeli). Dzięki temu silnik SQL CE poprawnie zainicjuje wszystkie tabele co pozwoli uniknąć problemu nieistniejących tabel. Dlaczego? Ponieważ nawet jeżeli błąd jest poprawiony w nowych uaktualnieniach, to nie mamy grawancji, że każdy użytkownik kożysta z najnowszej wersji systemu (dystrybucja uaktualnień u operatorów niestety różnie trwa, szczególnie w przypadku telefonów z USA brandowanych przez AT&A).

Inny problem, na który chciałbym zwrócić uwagę jest dużo bardziej prozaiczny. Chodzi o sposób eksponowania tabel w klasie kontekstu bazy danych. Przyzwyczajenie do właściwości (properties) okazuje się tu niestety zabójcze dla projektu.

Wyobraźmy sobie poniższy kod:

1
2
3
4
5
6
7
8
9
public class SampleDataContext : DataContext
{
	public SampleDataContext(string connectionString)
		: base(connectionString)
	{
	}
 
	public Table<SampleEntry> DataEntries { get; set; }
}

Okazuje się, że po jego uruchomieniu każda próba odwołania się do tabeli otrzymujemy błąd jak na poniższym screenie (Value can not be null):

Okazuje się, że w takim przypadku rozwiązanie zakrawa wręcz o banał, ponieważ wystarczy usunąć dodaną przez nas podświadomie deklarację gettera i settera czyli { get; set; } przy definicji tabeli – zamiast propercji powinna ona być zwykłym polem, o czym warto pamiętać, bo może wam to zaoszczędzić ładny kawałek czasu – w moim przypadku ta “pomyłka” kosztowała 3 godziny :)