Jest to prawdopodobnie największy problem ze stratą czasu, nad rozwiązaniem którego spędziłem godziny.
var db = new hublisherEntities();
establishment_brands est = new establishment_brands();
est.brand_id = 1;
est.establishment_id = 1;
est.price = collection["price"];
est.size = collection["size"];
db.establishment_brands.Add(est);
db.SaveChanges();
To daje mi błąd
Wartość nie może być pusta. Nazwa parametru: źródło
stacktrace of
[ArgumentNullException: Value nie może być null. Nazwa parametru: źródło] System.Linq.Enumerable.Any (
1 source, Func
predykat IEnumerable 2) +4083335 System.Data.Entity.Internal.InternalContext.WrapUpdateException (UpdateException updateException) +87
System.Data.Entity.Internal.InternalContext.SaveChanges () + 193
System.Data.Entity.Internal.LazyInternalContext.SaveChanges () +33
System.Data.Entity.DbContext.SaveChanges () +20 ... ...
Chcę tylko dodać jednostkę do tabeli. ORM to EF.
c#
asp.net-mvc
entity-framework
danielovich
źródło
źródło
Odpowiedzi:
Miałem to jakiś czas temu i odpowiedź niekoniecznie jest taka, jakiej można się spodziewać. Ten komunikat o błędzie często pojawia się, gdy parametry połączenia są nieprawidłowe.
Przypuszczalnie będziesz potrzebować czegoś takiego:
Dzieje się tak, że szuka źródła danych w niewłaściwym miejscu; Entity Framework określa to nieco inaczej. Jeśli opublikujesz parametry połączenia i konfigurację EF, możemy to sprawdzić.
źródło
Gdzieś wewnątrz DbContext znajduje się wartość, która jest
IEnumerable
i jest wykonywana przy użyciuAny()
(lubWhere()
lubSelect()
lub dowolnej innej metody LINQ), ale ta wartość tonull
.Dowiedz się, czy umieściłeś zapytanie razem (gdzieś poza przykładowym kodem), w którym używasz metody LINQ, lub że
IEnumerable
jako parametr został użyty parametr o wartości NULL.źródło
.Where()
- nadal byłanull
.Mój powód był inny niż reszta tutaj, więc pomyślałem, że opublikuję go dla każdego, kto może mieć ten problem.
Wywołałem Count na wystąpieniu DbSet z filtrem o wartości null ie
Zauważyłem, że przekazanie tutaj wartości null powodowało błąd, więc teraz wywołuję metodę bez parametrów, jeśli filtr ma wartość null:
To rozwiązało problem. Może to stanowić problem również w przypadku innych metod w DbSet.
źródło
Właśnie otrzymałem ten dokładny błąd w .Net Core 2.2 Entity Framework, ponieważ nie miałem
set;
w moimDbContext
:zmienić na:
Jednak nie pokazywał wyjątku, dopóki nie spróbowałem użyć zapytania linq z
Where()
iSelect()
jak wspominali inni powyżej.Próbowałem ustawić
DbSet
jako tylko do odczytu. Będę próbował ...źródło
tak jak do Twojej wiadomości, ktoś może uznać to za przydatne. Ścigałem swój ogon za ten błąd prawie 2 dni i zawsze myślałem o czymś dużym i szukałem klas, które mogą być problemem, aż w końcu znalazłem to bardzo głupi problem i było to w moim kodzie znacznika (HTML) w mypage.ascx . problem polegał na tym, że mam
<asp:EntityDataSource>
a to ma właściwość include i mam kilka innych tabel wymienionych tutaj i omyłkowo była tam tabela, która została niedawno usunięta z bazy danych i nigdy nie zauważyłem i zwraca wartość null z innymi jednostkami. Właśnie usunąłem głupią tabelę z listy włączeń i mogę już iść. mam nadzieję, że to komuś pomoże.źródło
Na wypadek, gdyby ktoś inny skończył tutaj z moim problemem z konfiguracją DB First Entity Framework.
Krótko mówiąc, musiałem przeciążać konstruktor Entities, aby zaakceptować parametry połączenia, ponieważ powodem jest możliwość użycia kontenera iniekcji zależności Asp.Net Core, który pobiera parametry połączenia z appsettings.json, zamiast magicznie pobierać je z App.config file podczas wywoływania konstruktora bez parametrów.
Zapomniałem dodać wywołania do zainicjowania moich DbSets w nowym przeciążeniu. Więc automatycznie generowany konstruktor bez parametrów wyglądał mniej więcej tak:
A moje nowe przeciążenie wyglądało tak:
Rozwiązaniem było dodanie tych inicjatorów, o które dba automatycznie generowany kod, prosty pominięty krok:
To naprawdę rzuciło mnie na pętlę, ponieważ niektóre wywołania w naszym repozytorium, które korzystały z kontekstu DbContext, działały dobrze (te, które nie potrzebowały tych zainicjowanych zestawów DBS), a inne zgłaszały błąd czasu wykonania opisany w OP.
źródło
Upewnij się, że wstrzykujesz repozytorium do konstruktora usługi. To mi rozwiązało problem. :: bije w czoło ::
źródło
Ten wyjątek zostanie zwrócony, jeśli spróbujesz zliczyć wartości w kolekcji zerowej.
Na przykład poniższe działa, gdy błędy nie mają wartości null, jednak jeśli błędy mają wartość null, wartość nie może mieć wartości null. Nazwa parametru: występuje wyjątek źródłowy .
Tego wyjątku można uniknąć, sprawdzając zamiast tego wartość null.
źródło
Rozwiązano za pomocą następującego rozwiązania
edmx
plik prawym przyciskiem myszy , wybierz Otwórz za pomocą, edytor XMLedmx:StorageModels
elemencieDefiningQuery
całkowiciestore:Schema="dbo"
sięSchema="dbo"
(jeśli istnieje)store:Name
właściwośćźródło
Mogło być tak głupio, jak w moim przypadku, gdy savechanges zawierał błąd bcoz baza danych nie miała obcych kluczy i do tabel EDM zostały dodane skojarzenia. Dodałem klucze obce do bazy danych i zregenerowałem EDM dla poprawki.
Błędy, które widziałem, są następujące: Przypadek 1 -> podczas używania DBContext dla EDM Message = Wartość nie może być zerowa. Nazwa parametru: source at System.Linq.Enumerable.Any [TSource] (
1 source, Func
predykat IEnumerable 2)Przypadek 2 -> podczas korzystania z ObjectContext dla EDM Message = Nie można zaktualizować EntitySet „Contact”, ponieważ ma on DefiningQuery i nie ma elementu w elemencie obsługującym bieżącą operację.
(Chciałem tylko wrzucić to tam na wypadek, gdyby to komuś pomogło).
źródło
W MVC, View screen wywołuje metodę znajdującą się w Controller lub Repository.cs i przypisuje wartość zwracaną do dowolnej kontrolki w CSHTML, ale ta metoda nie jest faktycznie zaimplementowana w .cs / controller, wtedy CSHTML wyrzuci wyjątek parametru NULL
źródło
Otrzymałem ten błąd, gdy miałem nieprawidłowy typ dla właściwości jednostki.
Kiedy usunąłem nieruchomość, błąd przestał występować.
źródło
W moim przypadku problem wyskoczył podczas konfigurowania aplikacji internetowej na IIS, gdy uruchomiono polecenie update na dowolnym rekordzie ten błąd został wygenerowany.
Był to problem z uprawnieniami w App_Data, który został ustawiony jako tylko do odczytu. Kliknij folder prawym przyciskiem myszy, usuń zaznaczenie pola wyboru Tylko do odczytu i gotowe. Nawiasem mówiąc, do celów testowych korzystałem z bazy danych localdb znajdującej się w folderze App_Data.
źródło
Mój błąd polegał na tym, że zapomniałem dodać .ThenInclude (s => s.SubChildEntities) do elementu nadrzędnego .Include (c => c.SubChildEntities) do akcji kontrolera podczas próby wywołania SubChildEntities w widoku Razor.
Należy zauważyć, że technologia IntelliSense społeczności programu Visual Studio 2017 nie pobiera obiektu SubChildEntities w wyrażeniu lambda w .ThenInclude (). Jednak z powodzeniem kompiluje się i wykonuje.
źródło
Wiem, że to długa droga od roku 2013 pytania, ale ten symptom może się pojawić, jeśli nie masz włączonego leniwego ładowania podczas migracji aplikacji ASP.NET 5 do ASP.NET Core, a następnie próbujesz uaktualnić do Entity Framework Core 2.x (z EF 6). Entity Framework Core przeniósł obsługę serwera proxy z opóźnionym ładowaniem do oddzielnego pakietu , więc musisz go zainstalować.
Jest to szczególnie ważne, jeśli wszystko, co załadowałeś, to pakiet Entity Framework Core Sql Server (który włącza Entity Framework dobrze).
Po zainstalowaniu pakietu proxy, jak mówią dokumenty,
.UseLazyLoadingProxies()
wywołaj w konstruktorze opcji DbContext (w sekcji konfiguracji Startup DI lub gdziekolwiek skonfigurujesz swój DbContext), a właściwość nawigacyjna, która rzucała powyższy wyjątek, przestanie go zgłaszać, i będzie działać jak wcześniej Entity Framework 6.źródło
Miałem ten sam problem z XUnit. Problem dotyczył mojego połączenia z bazą danych. Sprawdź, czy parametry połączenia są poprawne, czy nie.
źródło
W moim przypadku omyłkowo definiuję moje dwie różne kolumny jako tożsamości w konfiguracjach DbContext, jak poniżej,
Kiedy poprawię to jak poniżej,
Pozbyłem się również tego błędu.
źródło
Weź wiersz w bazie danych i ustaw wszystkie kolumny w tym wierszu na wartość zerową, taką jak „NULL”. Teraz przekaż tę wartość NULL za pomocą try catch lub if else.
źródło