Używam ASP.Net Web API i Code First Entity Framework iz tego, co przeczytałem, zazwyczaj ujawniasz obiekty DTO, a nie obiekty encji bezpośrednio w twoich metodach działania (zgodnie z http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-5).Atrybuty sprawdzania poprawności ASP.Net Web API na DTO?
Tak więc w jednym przypadku nad którym pracuję, aby uniknąć problemu "over-posting", jak opisano w powyższym linku, utworzyłem obiekt DTO z niemal wszystkimi właściwościami, co obiekt modelu. Zastanawiam się jednak, czy muszę duplikować wszystkie te same zestawy atrybutów sprawdzania poprawności (np. [Wymagane], [Zakres (N, M)] itp. Zarówno dla właściwości DTO, jak i modelu? Początkowo miałem nadzieję, że nie do (w celu uniknięcia powielania), ale potrzebujesz atrybutów sprawdzania poprawności w DTO, jeśli chcesz skorzystać z walidacji wiążącej (np. ModelState.IsValid) i na modelu głównym, jeśli chcesz utworzyć bazę danych z odpowiednimi ograniczeniami ([Wymagane ] -> nie null, itd.)
Czy nie ma lepszego sposobu
Ponadto, istnieją pewne cechy, które używa Entity ale walidacja wiążący model nie używają Na przykład, gdy [Range (n? , m)] będzie wyraźnie wpływać na walidację na niektórych danych wejściowych klienta, czy podmiot w ogóle o to dba (nie ma wpływu na utworzony DB schemat z tego, co mogę powiedzieć?)
„swap dto do modelu” następnie Weryfikacja modelu, jak będzie to działa? Z zamianą Myślę, że masz na myśli map dto do modelu? Jeśli tak, ModelState nadal będzie działał na dto, ponieważ ten został przekazany. Krótka historia: Czy umieściłeś Wymagany atrybut na swoim DTO? – Elisabeth
Możesz odwzorować DTO na model za pomocą AutoMappera lub dowolnej innej platformy, lub po prostu zrobić to ręcznie. Wymagany atrybut służy do zapewnienia stanu dto, z którym chcesz poradzić sobie. Model nie potrzebuje wymaganego atrybutu, tylko DTO. Możesz napisać klasę podstawową dla swoich modeli, która posiada DTO jako pewien stan i możesz wtedy po prostu pokazać właściwości DTO jako właściwości modelu. – Voltaic
Jeśli tak, to jaka jest strategia przesyłania informacji o modelu bazowym do klienta? Jeśli pole jest nieprawidłowe, dobrze byłoby wiedzieć, nie trafiając na serwer. Twierdziłbym, że jeśli dto jest używane w operacji aktualizacji, to umieszczanie walidacji lub innej logiki biznesowej w dto, aby klient mógł z góry wiedzieć, jak sformułować żądanie. – Watson