Это, наверное, самая большая трата времени, на решение которой я тратил часы долгое время.
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();
Это дает мне ошибку
Значение не может быть нулевым. Название параметра: источник
stacktrace из
[ArgumentNullException: значение не может быть нулевым. Имя параметра: источник] System.Linq.Enumerable.Any (
1 source, Func
предикат 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 ... ...
Я просто хочу добавить объект в таблицу. ORM - это EF.
c#
asp.net-mvc
entity-framework
Даниелович
источник
источник
Ответы:
У меня было это некоторое время назад, и ответ не обязательно такой, как вы ожидаете. Это сообщение об ошибке часто появляется, если строка подключения неверна.
Предположительно вам понадобится что-то вроде этого:
Что происходит, так это то, что он ищет источник данных не в том месте; Entity Framework определяет это немного иначе. Если вы опубликуете строку подключения и конфигурацию EF, мы сможем проверить.
источник
Где-то внутри DbContext есть значение, которое
IEnumerable
запрашиваетсяAny()
(илиWhere()
илиSelect()
или любой другой LINQ-метод), но это значение естьnull
.Выясните, составили ли вы запрос (где-то за пределами вашего примера кода), где вы используете LINQ-метод, или что вы использовали
IEnumerable
в качестве параметра значение NULL.источник
.Where()
- он все еще былnull
.Моя причина отличалась от остальных здесь, поэтому я решил опубликовать ее для всех, у кого может быть эта проблема.
Я вызывал Count на экземпляре DbSet с фильтром null, т.е.
Я обнаружил, что передача значения null здесь вызывает ошибку, поэтому теперь я вызываю метод без параметров, если фильтр имеет значение null:
Это решило проблему для меня. Это может быть проблемой и для любых других методов в DbSet.
источник
Я только что получил эту точную ошибку в .Net 2.2 Основной Entity Framework , потому что я не имел
set;
в моемDbContext
так:изменился на:
Однако он не показывал исключение, пока я не попытался использовать запрос linq с
Where()
и,Select()
как другие упоминали выше.Я пытался установить
DbSet
только для чтения. Я буду стараться ...источник
просто как к сведению, кому-то это может пригодиться. Я преследовал свой хвост за этой ошибкой почти 2 дня и всегда думал о чем-то большом и искал классы, которые могли бы быть проблемой, и, наконец, я обнаружил, что это очень глупая проблема, и это было в моем коде разметки (HTML) в mypage.ascx , проблема заключалась в том, что у
<asp:EntityDataSource>
меня есть свойство include, и у меня есть несколько других таблиц, перечисленных здесь, и по ошибке там была таблица, которая была недавно удалена из базы данных, и я никогда не замечал, и она возвращала null с другими объектами. Я только что удалил эту дурацкую таблицу из списка включений, и все готово. надеюсь, это может кому-то помочь.источник
На случай, если кто-то еще окажется здесь с моей проблемой с настройкой DB First Entity Framework.
Короче говоря, мне нужно было перегрузить конструктор Entities, чтобы принять строку подключения, причина заключалась в возможности использовать контейнер для инъекций зависимостей Asp.Net Core, извлекающий строку подключения из appsettings.json, а не волшебным образом получая ее из App.config файл при вызове конструктора без параметров.
Я забыл добавить вызовы для инициализации моих DbSets в новой перегрузке. Таким образом, автоматически сгенерированный конструктор без параметров выглядел примерно так:
И моя новая перегрузка выглядела так:
Решение заключалось в том, чтобы добавить те инициализаторы, о которых позаботится автоматически сгенерированный код, простой пропущенный шаг:
Это действительно вызвало у меня зацикливание, потому что некоторые вызовы в нашем репозитории, которые использовали DbContext, работали нормально (те, которые не нуждались в этих инициализированных DBSets), а другие выдают ошибку времени выполнения, описанную в OP.
источник
Убедитесь, что вы вводите репозиторий в конструктор службы. Это решило проблему для меня. :: шлепает лбом ::
источник
Это исключение будет возвращено, если вы попытаетесь подсчитать значения в пустой коллекции.
Например, приведенное ниже работает, когда ошибки не равны нулю, однако, если ошибки равны нулю, значение не может быть нулевым. Имя параметра: возникает исключение источника .
Этого исключения можно избежать, вместо этого проверив значение null.
источник
Решено с помощью следующего решения
edmx
файл, выберите Открыть с помощью, редактор XML.edmx:StorageModels
элементеDefiningQuery
полностьюstore:Schema="dbo"
вSchema="dbo"
(если есть)store:Name
собственностьисточник
Это могло быть так же глупо, как и в моем случае, когда savechanges ошибался bcoz, у db не было внешних ключей, и ассоциации были добавлены в таблицы EDM. Я добавил внешние ключи в базу данных и восстановил EDM для исправления.
Я видел следующие ошибки: Случай 1 -> при использовании DBContext для EDM Сообщение = Значение не может быть нулевым. Имя параметра: источник в System.Linq.Enumerable.Any [TSource] (
1 source, Func
предикат IEnumerable 2)Случай 2 -> при использовании ObjectContext для EDM Сообщение = Невозможно обновить EntitySet «Контакт», потому что у него есть DefiningQuery и в элементе нет элемента, поддерживающего текущую операцию.
(Просто хотел бросить туда на случай, если это кому-то поможет).
источник
В MVC экран просмотра вызывает метод, который находится в Controller или Repository.cs, и присваивает возвращаемое значение любому элементу управления в CSHTML, но этот метод фактически не реализован в .cs / controller, тогда CSHTML выдаст исключение параметра NULL
источник
Я получил эту ошибку, когда у меня был недопустимый тип для свойства сущности.
Когда я удалил свойство, ошибка перестала появляться.
источник
В моем случае проблема возникла при настройке веб-приложения в IIS. Когда была запущена команда обновления для любой записи, эта ошибка генерировалась.
Это была проблема с разрешением для App_Data, который был установлен только для чтения. Щелкните папку правой кнопкой мыши, снимите флажок «Только для чтения», и все готово. Кстати, для тестирования я использовал базу данных localdb, которая находилась в папке App_Data.
источник
Моя ошибка заключалась в том, что я забыл добавить .ThenInclude (s => s.SubChildEntities) к родительскому .Include (c => c.SubChildEntities) к действию контроллера при попытке вызвать SubChildEntities в представлении Razor.
Следует отметить, что IntelliSense сообщества Visual Studio 2017 не принимает объект SubChildEntities в лямбда-выражении в .ThenInclude (). Тем не менее, он успешно компилируется и выполняется.
источник
Я знаю, что до 2013 года еще далеко, но этот симптом может проявиться, если у вас не включена ленивая загрузка при переносе приложения ASP.NET 5 на ASP.NET Core, а затем при попытке обновления до Entity Framework Core 2.x (из EF 6). Entity Framework Core перенесла поддержку прокси-сервера с отложенной загрузкой в отдельный пакет , поэтому вам необходимо установить его.
Это особенно верно, если все, что вы загрузили, - это пакет Entity Framework Core Sql Server (который отлично включает Entity Framework).
После установки пакета прокси, как говорится в документации, вызовите
.UseLazyLoadingProxies()
конструктор параметров DbContext (в разделе настройки Startup DI или где бы вы ни настраивали свой DbContext), и свойство навигации, которое генерировало вышеуказанное исключение, перестанет его генерировать, и будет работать как раньше Entity Framework 6.источник
У меня была такая же проблема с XUnit. Проблема была в моем подключении к базе данных. Проверьте правильность строки подключения.
источник
И в моем случае я ошибочно определяю два своих столбца как идентификаторы в конфигурациях DbContext, как показано ниже:
Когда я исправлю это, как показано ниже,
Я тоже избавился от этой ошибки.
источник
Возьмите строку в базе данных и сделайте все столбцы в этой строке нулевыми, например, "NULL". Теперь передайте это значение NULL, используя try catch или if else.
источник