2010-06-21 15 views
6

Używam Entity Framework 4.0Entity Framework 4.0 Użyj domyślnej wartości bazy danych

Wiele naszych tabel ma kolumnę o nazwie RowID, używaną przez DBA do śledzenia rzeczy. Kolumna NON NULLABLE ma domyślną wartość bazy danych, która odwzorowuje funkcję.

Problem polega na tym, że model EDMX wymaga, aby ta właściwość posiadała wartość w Entity, utrudniając konstrukcję obiektu.

Przeczytałem wiele postów dotyczących ręcznego modyfikowania plików EDMX i SSDL, aby to działało. To nie jest możliwe dla naszego zespołu.

Czy istnieje lepsze rozwiązanie tego problemu, inne niż uczynienie kolumna Niuble w bazie danych? Nie dbam o odzyskanie wartości, chcę tylko, aby baza danych mogła ustawić ją samodzielnie.

Odpowiedz

2

Jeśli identyfikacja RowID nigdy nie musi być odczytywana lub zapisywana w kontekście aplikacji, to w ogóle nie należy ona do twojego modelu jednostki. Po prostu usuń go z modelu encji za pomocą projektanta (prawy przycisk myszy> usuń) i pozwól, aby baza danych zarządzała nim.

+0

Problemem jest RowID jest FK na innych stołach, więc muszę być w stanie je zdobyć i użyć go przy tworzeniu jednostek podrzędnych. – ctorx

6

Powinieneś ustawić StoreGeneratedPattern = "Computed" bezpośrednio w SSDL (XML za modelem).

1 - Prawo kliknij model

2 - wybierz "Otwórz z" => XML Editor

3 - Spójrz na odwzorowaniu jednym ze stolików w modelu sekcji Content

4 - Dodaj atrybut StoreGeneratedPattern = "Computed" do kolumny RowID 5 - Wykonaj globalną zamianę pliku, aby każda tabela miała definicję RowID z StoreGeneratedPattern = "Computed"

UWAGA: Jeśli używasz Kreatora aktualizacji modelu, musisz ręcznie zaktualizować plik XML ponownie. Moje zalecenie: Nie używaj kreatora ani nie zapisuj oryginalnych i zmienionych wierszy xml w osobnym pliku tekstowym, aby były dostępne do wykonania zastępowania globalnego po uruchomieniu kreatora.

Więcej informacji można znaleźć w tym artykule: http://msdn.microsoft.com/en-us/library/dd296755(v=vs.90).aspx

+1

Używam Entity Framework 5, a gdy ustawię StoreGeneratedPattern = Computed, a następnie używam kreatora "Aktualizuj model z bazy danych ...", pole to * nie * zostanie zresetowane. – DaveD

Powiązane problemy