Значение не может быть null. Имя параметра: источник



это, вероятно, самая большая потеря времени проблема, которую я потратил часы на решение в течение длительного времени.



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();


это дает мне ошибка




значение не может быть null. Имя параметра: источник




stacktrace of




[ArgumentNullException: значение не может быть null. Имя параметра: источник]
Система.В LINQ.Перечислимый.Любой(Интерфейс IEnumerable1 source, Func2 сказуемое)
+4083335 Система.Данные.Сущность.Внутренний.Внутренний контекст.WrapUpdateException(UpdateException
updateException) +87

Система.Данные.Сущность.Внутренний.Внутренний контекст.SaveChanges() +193

Система.Данные.Сущность.Внутренний.LazyInternalContext.SaveChanges () +33

Система.Данные.Сущность.DbContext.Метод SaveChanges() +20 ... ...




Я просто хочу добавить объект в таблицу. ОРМ - это эф.

2204   12  

12 ответов:

У меня был этот некоторое время назад, и ответ не обязательно то, что вы ожидаете. Это сообщение об ошибке часто появляется, когда строка подключения неверна.

думаю, вам нужно что-то вроде этого:

<connectionStrings>
    <add name="hublisherEntities" connectionString="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True" />
        </parameters>
    </defaultConnectionFactory>
</entityFramework>

происходит то, что он ищет источник данных в неправильном месте; Entity Framework определяет его немного по-другому. Если вы опубликуете свою строку подключения и EF config, мы можем проверить.

где-то внутри DbContext есть значение, которое IEnumerable и запрашивается с Any() (или Where() или Select() или любой другой LINQ-метод), но это значение null.

Узнайте, если вы ставите запрос вместе (где-то за пределами вашего примера кода), где вы используете LINQ-метод, или что вы использовали IEnumerable как параметр, который равен нулю.

моя причина отличалась от остальных здесь, поэтому я подумал, что опубликую ее для всех, у кого может быть эта проблема.

Я вызывал Count на экземпляр DbSet с фильтром null т. е.

dbSet.Count(null);

я обнаружил, что передача null здесь вызывает ошибку, поэтому теперь я вызываю метод без параметров, если фильтр равен null:

 if (filter == null)
 {
     return dbSet.Count();
 }
 else
 {
     return dbSet.Count(filter);
 }

это решило проблему для меня. Это может быть проблемой для любых других методов на DbSet, а также.

так же, как FYI, кто-то может найти его полезным. Я преследовал свой хвост за эту ошибку почти 2 дня и всегда думал о чем-то большом и искал классы, которые могут быть проблемой, и, наконец, я нашел это очень глупым вопросом, и это было в моем коде mark up (HTML) в mypage.ascx вносятся. проблема была у меня <asp:EntityDataSource> и у этого есть свойство include, и у меня есть некоторые другие таблицы, перечисленные здесь, и по ошибке там была таблица, которая была удалена из базы данных недавно, и я никогда заметил и он возвращающий null с другими сущностями. Я просто удалил глупую таблицу из списка include, и мне хорошо идти. надеюсь, это может помочь кому-то.

решается с помощью следующего решения

1) Щелкните правой кнопкой мыши на файле edmx, выберите Открыть с помощью, XML editor

2) найдите объект в элементе edmx:StorageModels

3) Удалите DefiningQuery полностью

4) переименовать хранилище: Schema= " dbo "в Schema=" dbo "(если существует)

5) удалить магазин: имя свойства

в случае, если кто-то еще окажется здесь с моей проблемой с настройкой DB First Entity Framework.

короче говоря, мне нужно было перегрузить конструктор сущностей, чтобы принять строку подключения, причиной чего является возможность использования Asp.Net контейнер инъекции основных зависимостей, вытягивающий строку подключения из appsettings.json, а не волшебным образом получить его из приложения.конфигурационный файл при вызове конструктора без параметров.

Я забыл добавить вызовы инициализировать мой dbset объектов в новой перегрузкой. Таким образом, автоматически сгенерированный конструктор без параметров выглядел примерно так:

    public MyEntities()
        : base("name=MyEntity")
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

и моя новая перегрузка выглядела так:

    public MyEntities(string connectionString)
        : base(connectionString)
    {
    }

решение состояло в том, чтобы добавить те инициализаторы, о которых заботится автоматически сгенерированный код, простой пропущенный шаг:

     public MyEntities(string connectionString)
        : base(connectionString)
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

Это действительно бросило меня на цикл, потому что некоторые вызовы в нашем Respository, которые использовали DbContext, работали нормально (те, которые не нуждались в инициализации Dbset объектов), а остальные выбрасывать ошибки во время выполнения, описанных в ОП.

это может быть так же глупо, как и в моем случае, когда savechanges ошибался bcoz, у БД не было внешних ключей, и ассоциации были добавлены в таблицы EDM. Я добавил внешние ключи в БД и восстановил EDM для исправления.

ошибки, которые я видел, заключаются в следующем: Случай 1 - > при использовании DBContext для EDM Message=значение не может быть null. Имя параметра: источник в системе.В LINQ.Перечислимый.Любой [TSource](IEnumerable1 source, Func2 сказуемое)

Case 2 - > при использовании ObjectContext для ЭЛЕКТРОЭРОЗИОННАЯ ОБРАБОТКА Message=не удается обновить EntitySet 'Contact', поскольку он имеет DefiningQuery и в элементе не существует элемента для поддержки текущей операции.

(просто хотел бросить его туда, если это кому-то поможет).

в MVC экран просмотра вызывает метод, который находится в контроллере или репозитории.cs и присвоение возвращаемого значения любому элементу управления в CSHTML, но этот метод фактически не реализован .cs / controller, то CSHTML будет выдавать исключение нулевого параметра

Я получил эту ошибку, когда у меня был недопустимый тип для свойства сущности.

public Type ObjectType {get;set;}

когда я удалил свойство ошибка перестала происходить.

в моем случае проблема возникла при настройке веб-приложения на IIS, когда команда обновления на любой записи была запущена, эта ошибка была сгенерирована.

Это был вопрос разрешения на App_Data, который установлен только для чтения. Щелкните правой кнопкой мыши папку, снимите флажок только для чтения, и все готово. Кстати, для тестирования я использовал базу данных localdb, которая была в папке App_Data.

убедитесь, что вы вводите репозиторий в конструктор службы. Это решило все за меня. :: шлепает по лбу::

моя ошибка заключалась в том, что я забыл добавить .Затем включите (s => S.SubChildEntities) на родителя .Включите (c => C.SubChildEntities) в действие контроллера при попытке вызвать SubChildEntities в представлении Razor.

var <parent> = await _context.Parent
            .Include(c => c.<ChildEntities>)
            .ThenInclude(s => s.<SubChildEntities>)
            .SingleOrDefaultAsync(m => m.Id == id);

следует отметить, что IntelliSense сообщества Visual Studio 2017 не выбирает объект SubChildEntities в лямбда-выражении в поле .Затем включаю (). Однако он успешно компилируется и выполняется.

Comments

    Ничего не найдено.