Wpis z mikrobloga

#aspnet #csharp #mvc #entityframework

Od dłuższego czasu mam problem, który nie bardzo wiem jak rozwiązać. Zadałem to pytanie tu, wiem w czym problem, ale rozwiązania dalej nie znalazłem.

Otóż w skrócie wygląda to tak: mam model, który ma dwie zmienne typu DateTime. Przechowują one dane, których użytkownik nie powinien móc edytować, toteż w formularzu edycji na mojej stronie internetowej nie utworzyłem żadnego pola typu input na te zmienne. Kiedy użytkownik klika przycisk typu submit żeby wysłać formularz, wysyła tylko niektóre dane (UsersLanguage,OtherLanguage,Notes) reszta ma pozostać niezmieniona.

Problem polega na tym, że skoro użytkownik nie przesyła tych zmiennych DateTime za pomocą formularza, to przesłana na serwer klasa Word ustawia te DateTime'y jako null. W VisualStudio w debuggerze widać, że zmienne te mają wartość "0001-01-01". Z tym, że DateTime obsługuje zakres od "January 1, 1753" do "December 31, 9999". Entity Framework dostaje więc datę która wg. niego nie istnieje, więc się wypierdziala.

Kompletnie nie rozumiem czemu tak się dzieje: przecież i tak nie chcę tych przesłanych DateTimeów nigdzie zapisywać. Wartości te, mają zostać niezmienne, takie jakie były wcześniej. Dlaczego więc EF zawraca sobie tym głowę? O.o
  • 10
@niepoprawnyhumanista: chciałem tak zrobić, ale są 2 problemy w związku z tym:
1. Nie chcę, żeby DateTime mógł być nullem, bo te zmienne DateTime są konieczne żeby aplikacja działała
2. jak zmieniam w modelu na DateTime? to Visual Studio krzyczy:

Error 2 Argument 1: cannot convert from 'System.DateTime?' to 'System.DateTime'
@niepoprawnyhumanista: ok, zrobiłem jak mówisz, ale coś mi się nie chce baza zaaktualizować:

The current model no longer matches the model used to pre-generate the mapping views, as indicated by the ViewsForBaseEntitySets8f8ed3558b66b3b0b5bd7e2867696566a8a1964469dfa075926133c040704be5.MappingHashValue property. Pre-generated mapping views must be either regenerated using the current model or removed if mapping views generated at runtime should be used instead. See http://go.microsoft.com/fwlink/?LinkId=318050 for more information on Entity Framework mapping views.


Dodałem migrację, zrobiłem update-database i
@Pietrek558:
Zmienił się model i to znacząco - teraz pole w bazie może być nullem, przedtem nie mogło (efekt podobny jak dodanie [Required] nad polem). Niby nic a jednak coś.

Nie wiem dokładnie o co chodzi z tymi "pre-generated views" wiem ze mozna to jakos samemu wygenerować by przyspieszyć działanie EF, ale nie robilem tego.
Pewnie musisz je usunac i wygenerowac jeszcze raz.