2009-06-23 6 views
6

Używam DataSet do połączenia mojego programu C# z bazą danych SQL. Chcę, aby jedna z kolumn była wyliczeniem i chcę, aby działała jako wyliczenie w moim kodzie. Jak mogę to zrobić?Enum w DataSet

Odpowiedz

8

Nie chcę rozpętać bańki wszystkich, ale można łatwo odwzorować liczbę całkowitą do Enum za pomocą mocno wpisanego zestawu danych. Ciągle to robię. Zamiast pisać wszystko tutaj, stworzyłem entry on my Blog opisujące szczegółowo, jak to osiągnąć.

+0

Thaks, dokładnie tego chciałem. – svick

+0

+1 Dobra robota wykonująca ten proof-of-concept. Wiedziałem, że to możliwe z wpisanym zestawem danych. Jednak przy takim podejściu nie będziesz musiał ponownie wprowadzać zmiany w pliku xsd za każdym razem, gdy wprowadzisz jakąkolwiek zmianę do zestawu danych, ponieważ xsd zostanie zdeptany przez projektanta wpisanych datasetów? – James

+0

Tak, xsd będzie clobbered co jest problematyczne. Mam nadzieję, że użycie niestandardowych typów wyliczeniowych w zestawach danych jest oszczędne, a konserwacja zostanie zminimalizowana. Jednak wolę radzić sobie z typem enum bezpośrednio, zamiast rzucać tam iz powrotem do liczby całkowitej. Jest tylko kilka miejsc, w których to robimy, a te zbiory rzadko się zmieniają, więc wpływ jest minimalny.Jeśli zamierzasz często zmieniać swoje zbiory danych, ból znacznie wzrośnie :( – Josh

0

Nie sądzę, że możesz. SQL Server nie ma pojęcia wyliczenia.

+0

Nie obchodzi mnie, jak będzie reprezentowany w databse. Może tam być int lub string. – svick

+0

Trzeba się troszczyć. Jedną rzeczą, której nie można przedstawić w bazie danych, jest enum. –

+0

Nienawidzę się z tym nie zgodzić, ale wyliczenie może być łatwo przedstawione za pomocą tabeli odnośników z identyfikatorem i nazwą. Dzieje się to bardzo często, szczególnie jeśli wiesz, że tabela odnośników zmieni się tylko wtedy, gdy zmieni się wyliczenie kodu. – Josh

0

Proponuję użyć warstwy ApplicationService, która znajduje się na warstwie repozytorium. Następnie w swojej klasie ApplicationService (pomyśl o odpowiedniej nazwie dla tej klasy) możesz przekształcić dane zwracane z warstwy repozytorium do odpowiedniej wartości wyliczenia w twoim obiekcie POCO.

0

Możesz spróbować użyć urządzenia strongly typed dataset.

+0

Jak to pomogłoby w wyliczeniu? –

+0

Można użyć tej konstrukcji, aby zmienić/dodać jeden z typów danych kolumn do typu niestandardowego wyliczenia. tak długo, jak numeryczne wartości db, które je wypełniają, są w zakresie enum, uważam, że może to zadziałać. Wymagałoby to dodania częściowej klasy lub modyfikacji wygenerowanej. – James

+0

Nawet zakładając, że to działa, jest to problem konserwacyjny, ponieważ masz teraz wiele definicji tego, co jest ważne w tej kolumnie. Ponadto będę zaskoczony, gdy dowiem się, że ADO.NET domyślnie wykonuje rzutowanie, którego nie można wykonać w kodzie: MyEnum e = 1; nie będzie się kompilować. –

0

Technicznie nie możesz. Enum są statyczne na maszynie, są zaprojektowane do użycia, gdy znasz wszystkie wartości podczas kompilacji. Chociaż istnieje kilka problemów, gorąco polecam, aby tego nie robić.
Spójrz na niemodyfikowalny zestaw danych, to da większość korzyści z Enum i może być tworzony w locie.

Podczas gdy dane nie mogą być przechowywane jako wyliczenie, mogą być używane jako filtr fantazyjny, o ile dane w kolumnie bazy danych są typu całkowitoliczbowego. To kompletnie inne pytanie, jeśli o to właśnie prosisz. Idź do MSDN page i przeczytaj na Enum's.