El valor no puede ser nulo. Nombre del parámetro: fuente

Este es probablemente el mayor problema de pérdida de tiempo que he pasado horas solucionando durante mucho tiempo.

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

Esto me da un error de

El valor no puede ser nulo. Nombre del parámetro: fuente

stacktrace de

[ArgumentNullException: el valor no puede ser nulo. Nombre del parámetro: fuente] System.Linq.Enumerable.Any (origen 1 source, Func IEnumerable 1 source, Func predicado 1 source, Func 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 … …

Solo quiero agregar una entidad a la mesa. El ORM es EF.

Hace un tiempo tuve esto, y la respuesta no es necesariamente lo que esperarías. Este mensaje de error a menudo aparece cuando la cadena de conexión es incorrecta.

En una suposición, necesitarás algo como esto:

           

Lo que está sucediendo es que está buscando una fuente de datos en el lugar equivocado; Entity Framework lo especifica de forma ligeramente diferente. Si publica su cadena de conexión y configuración de EF, entonces podemos verificar.

En algún lugar dentro de DbContext hay un valor que es IEnumerable y se consulta con Any() (o Where() o Select() o cualquier otro método LINQ), pero este valor es null .

Averigüe si coloca una consulta en conjunto (en algún lugar fuera de su código de ejemplo) donde está utilizando un método LINQ, o que utilizó un IEnumerable como parámetro que es NULL.

Mi razón era diferente al rest aquí, así que pensé en publicarla para cualquier otra persona que pudiera tener este problema.

Estaba llamando a Count en una instancia de DbSet con un filtro de null, es decir,

 dbSet.Count(null); 

Descubrí que pasar null aquí estaba causando el error, así que ahora llamo al método sin parámetros si el filtro es nulo:

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

Esto solucionó el problema para mí. Esto puede ser un problema para cualquier otro método en DbSet también.

solo como un FYI, alguien puede encontrarlo útil. Estaba persiguiendo mi cola por este error casi 2 días y siempre estaba pensando algo grande y buscando las clases que podrían ser el problema y finalmente lo encontré muy estúpido y estaba en mi código de marcación (HTML) en mypage.ascx . el problema era que tengo un y esto tiene una propiedad include y tengo algunas otras tablas enumeradas aquí y erróneamente una tabla estaba allí que ha sido eliminada de la base de datos recientemente y nunca lo noté y devolviendo null con otra entidades. Acabo de eliminar la estúpida mesa de la lista de inclusión y estoy listo para empezar. Espero que esto pueda ayudar a alguien.

Resuelto con la siguiente solución

1) Haga clic derecho en el archivo edmx, seleccione Abrir con, editor XML

2) Ubique la entidad en el elemento edmx: StorageModels

3) Elimine por completo el DefiningQuery

4) Cambiar el nombre de la tienda: Schema = “dbo” a Schema = “dbo” (si existe)

5) Eliminar la tienda: propiedad de nombre

En caso de que alguien más termine aquí con mi problema con una configuración de DB First Entity Framework.

Para resumir, necesitaba sobrecargar al constructor de Entidades para aceptar una cadena de conexión, la razón era la capacidad de usar el contenedor de dependency injections Asp.Net Core extrayendo la cadena de conexión de appsettings.json, en lugar de obtenerla mágicamente de la App.config archivo al llamar al constructor sin parámetros.

Olvidé agregar las llamadas para inicializar mis DbSets en la nueva sobrecarga. Por lo tanto, el constructor sin parámetros generado automáticamente se veía así:

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

Y mi nueva sobrecarga se veía así:

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

La solución fue agregar esos inicializadores que el código autogenerado se encarga, un simple paso perdido:

  public MyEntities(string connectionString) : base(connectionString) { Set1 = Set(); Set2 = Set(); } 

Esto realmente me lanzó a un bucle porque algunas llamadas en nuestro repository que usaban el DbContext funcionaban bien (las que no necesitaban esos DBSets inicializados), y las otras arrojaban el error de tiempo de ejecución descrito en el OP.

Podría ser tan tonto como en mi caso en que los cambios de guardado eran erróneos porque el db no tenía claves externas y las asociaciones se agregaron a las tablas de EDM. Agregué claves externas en el DB y regeneré el EDM para una solución.

Los errores que estaba viendo son los siguientes: Caso 1 -> cuando se usa DBContext para EDM Message = Value no puede ser nulo. Nombre del parámetro: source en System.Linq.Enumerable.Any [TSource] ( 1 source, Func IEnumerable 1 source, Func predicado 1 source, Func 2)

Caso 2 -> cuando se usa ObjectContext para EDM Message = No se puede actualizar el EntitySet ‘Contact’ porque tiene un DefiningQuery y no existe ningún elemento en el elemento para admitir la operación actual.

(Solo quería tirarlo allí en caso de que ayude a alguien).

En MVC, la pantalla de vista está llamando al método que está en Controller o Repository.cs y asignando valor devuelto a cualquier control en CSHTML, pero ese método no está implementado en .cs / controller, entonces CSHTML lanzará la excepción de parámetro NULL

Obtuve este error cuando tenía un tipo no válido para una propiedad de entidad.

 public Type ObjectType {get;set;} 

Cuando eliminé la propiedad, el error se detuvo.

En mi caso, el problema surgió al configurar la aplicación web en IIS. Cuando se activó el comando de actualización en cualquier registro, se generó este error.

Era un problema de permiso en App_Data que se configuraba como de solo lectura. Haga clic derecho en la carpeta, desmarque la checkbox de solo lectura y listo. Por cierto, para fines de prueba, estaba usando la base de datos localdb que estaba en la carpeta App_Data.

Asegúrese de estar inyectando el repository en el constructor del servicio. Eso lo resolvió para mí. :: golpea la frente ::

Mi error fue olvidar agregar .ThenInclude (s => s.SubChildEntities) al padre. Incluir (c => c.SubChildEntities) a la acción del Controlador al intentar llamar a SubChildEntities en la vista Razor.

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

Cabe señalar que el IntelliSense de Visual Studio 2017 Community no recoge el objeto SubChildEntities en la expresión lambda en .ThenInclude (). Sin embargo, comstack y ejecuta con éxito.