Poszukuję rozwiązania do przeprowadzenia niestandardowej weryfikacji jednostek (która wymagałaby dostępu do bazy danych, sprawdzenia dla wielu elementów ...), gdy użytkownik zapisuje zmiany na ekranie danych dynamicznych, z Entity Framework.
Sprawdzanie poprawności jest bardziej złożone niż to, co mogę zrobić z atrybutami (wymaga dostępu do bazy danych itp.).Niestandardowa zaawansowana walidacja jednostek za pomocą Dynamic Data
Czy możesz przechwycić wywołanie SaveChanges?
Próbowałem przesłonić obiekt ValidateEntity
w obiekcie DbContext, ale dane dynamiczne nie wydają się go wywoływać (prawdopodobnie dlatego, że używa wewnętrznego obiektu ObjectContext, nie wiem dlaczego), a zastępowanie zmian SaveChanges również nie pomaga.
nie widzę żadnego zdarzenia, które mogłoby mi subskrypcji ...
documentation powinno pomóc:
walidacji Dostosuj dla pojedynczego pola danych poprzez nadpisanie metody OnValidate lub obsługi zdarzeń Weryfikuj , które są wywoływane po zmianie dowolnego pola danych. To podejście umożliwia dodanie sprawdzania poprawności i logiki biznesowej dla pojedynczego pola. To podejście jest bardziej ogólne niż dodawanie walidacji dla pojedynczego pola. Jest użyteczny , gdy tę samą logikę walidacji można zastosować do więcej niż jednego pola danych . Umożliwia także przeprowadzanie sprawdzania poprawności obejmujących wiele pól.
Ale używam POCO Entity Framework 6 klas, więc nie ma OnValidate
sposób zastąpić, iz tego co czytałem to dla LinqToSql, i nie mogę znaleźć imprezę Validate
wspominają.
Próbowałam zapisać się do imprezy SavingChanges
wewnętrznej ObjectContext
w konstruktorze mojego DbContext, aby zadzwonić do ValidateEntity
ręcznie, ale nie wiem, co zrobić z wyniku. Jeśli wyrzucę DbEntityValidationException
(lub ValidationException
jak sugerowano w this article), ASPNET traktuje go jak każdy wyjątek (żółty ekran).
Implementacja IValidatableObject
również nie działa.
Próbowałem również wdrożyć własne DynamicValidator
, aby zobaczyć, co się dzieje, ale bez powodzenia, wydaje się, że obsługuje wyjątek (jeśli przesłonię ValidateException
, i umieścić punkt przerwania, widzę to), ale nadal jest bąbelkowane do domyślnego obsługa błędów i wyświetla żółty ekran. Muszę czegoś przegapić.
Jak zatem wykonać kompleksową walidację (cross-field, z zapytaniami itp.) Na encji przed zapisaniem w Dynamic Data/EF?
zgadzam się z tym stwierdzeniem, ja też uwierzyć, że logika biznesowa nie powinna być połączona z Entity Framework – Eldho
To dyskusyjne. Być może obiekt warstwy domeny może mieć sprawdzanie poprawności. Tak długo jak okropna "warstwa repozytorium przed wzorem EF" nie jest używana ... – James
Zgadzam się, ale dane dynamiczne nie dają wielu opcji sprawdzania poprawności. Ale problemu nie ma, problem polega na tym, że wyjątek DbValidationException nie jest przechwytywany przez DynamicValidator (chociaż dokumenty i artykuły, które znajduję, mówią, że powinien), więc dostaję żółty ekran. W tej chwili nawet nie próbuję mieć dobrej architektury, po prostu mieć coś, co działa :( –