Validation failed for one or more entities. See ‘EntityValidationErrors’ property for more details.

Al intentar insertar varios registros mediante mi Repository y después intentar guardar los cambios, me aparecía este error:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

Esto ocurre cuando estás tratando de insertar un registro que rompe las reglas de validación. Por ejemplo, estás tratando de insertar un valor en un campo que no coincide con su tipo de dato o estás ingresando un texto “nvarchar” de mayor longitud al permitido.

Para poder visualizar los errores de validación que se están generando, agrega un “try…catch” en el momento en que guardas, de esta forma:

try 
{
   miRepositorio.Guardar();
} 
catch (DbEntityValidationException dbEx) 
{
   foreach(var validationErrors in dbEx.EntityValidationErrors) 
   {
      foreach(var validationError in validationErrors.ValidationErrors) 
      {
         Trace.TraceInformation("Property: {0} Error: {1}",
             validationError.PropertyName,
             validationError.ErrorMessage);
      }
   }
}

Ahora corre tu aplicación en modo “debug” utilizando Visual Studio.
Abre la ventana “output” que encuentras en el menú Debug -> Windows -> Output.

La instrucción “Trace” va a escribir los errores en esta ventana. Es posible que el contenido de esta ventana esté lleno de información del “debugger”, si es así oprime CTRL-F y busca “Property:”, verás lo siguiente:

Visual Studio Trace

De esta forma podrás ver los errores que están apareciendo y modificar tu código para corregirlos.

Fuente.

This program is blocked by group policy. For more information, contact your system administrator

Tratando de subir una aplicación web escrita en asp.net MVC 4.5.2 a un hospedaje de Godaddy, me salía este error:

This program is blocked by group policy. For more information, contact your system administrator.

Este error se debe a que Godaddy no permite la compilación en el servidor.
Busca en tu archivo web.config esta configuración:

<system.codedom>

   <compilers>

      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warninglevel="4" compileroptions="/langversion:6 /nowarn:1659;1699;1701"></compiler>

      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warninglevel="4" compileroptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"></compiler>

   </compilers>

</system.codedom>

Y eliminar todo el contenido, hasta que quede así:

<system.codedom>
<!-- Nada aquí -->
</system.codedom>

Otra forma de hacer esto mismo, es colocar esto en tu archivo web.release.config.

<system.codedom xdt:transform="Remove">

Notas:

  • Cuando publiques tu sitio utilizando web deploy, en las opciones de File Publish Options marca la casilla Remove additional files at destination. Esto hace que se elimine cualquier archivo que esté provocando problemas en el servidor. Toma en cuenta que también eliminará cualquier archivo que hayas marcado como excluir del proyecto en Visual Studio, y que tal vez el sitio web esté utilizando (imágenes subidas por los usuarios por ejemplo).
  • También intenta marcar o desmarcar la opción Precompile during publishing. A mí me funciona bien desmarcada, pero a veces sirve marcarla.

Fuente: http://stackoverflow.com/questions/24638267/deploying-asp-net-mvc4-app-to-godaddy-compiler-issue

Error System.Security.SecurityException: Request failed

Tratando de subir una aplicación web escrita en asp.net MVC 4.5.2 a un hospedaje de Godaddy, me salía este error:

Error System.Security.SecurityException: Request failed

Se debe a que la aplicación necesita correr con permisos full trust. Hace un tiempo había una página en el panel de control de Godaddy que te permitía mover este ajuste, pero al parecer ya lo retiraron. Pero lo puedes especificar en tu archivo web.config, de esta forma:

<system.web>
   <trust level="Full"></trust>
</system.web>

Con esto se arregla el problema.

Fuente: http://stackoverflow.com/questions/11524582/system-security-securityexception

There is already an open DataReader associated with this Command which must be closed first.

Tenía en mi repository este método:

public IEnumerable Lista()
{
   return context.Estudiante
          .OrderBy(o => o.ApellidoPaterno);
}

Y luego desde un controller llamaba este método así:

var estudiantes= repositorioEstudiante.Lista();

Más adelante tenía una línea donde solicitaba esta propiedad: estudiante.Campus

Como la tabla “Estudiante” tiene una relación de uno a muchos con la tabla “Campus” (un campus tiene muchos estudiantes, y un estudiante pertenece únicamente a un campus), entonces al solicitar esa propiedad aparecía este error:

There is already an open DataReader associated with this Command which must be closed first.

Esto ocurre porque debido a lazy loading el método Lista tiene todos los elementos del estudiante, pero no el del campus relacionado. Cuando intentas llamar la propiedad estudiante.Campus se intenta hacer una nueva conexión y por eso ocurre el error.

Para solucionarlo, debes indicar al método Lista que incluya de una vez todos los registros relacionados de campus.

Se hace así:

public IEnumerable Lista()
{
   return context.Estudiante
          .OrderBy(o => o.ApellidoPaterno)
          .Include(e => e.Campus);
}

De esta forma estás haciendo Eager Loading, lo cual genera una sentencia join en la base de datos que carga de una vez todos los registros. Al solicitar la propiedad estudiante.Campus entonces no estás haciendo otra conexión nueva, y desaparece el error.

Para aprender más sobre los tipos de carga que existen checa esta página en la parte donde dice “Lazy, Eager, and Explicit Loading of Related Data”.

Otra solución al problema es activar MARS, pero prefiero la que te puse en este artículo.

A circular reference was detected while serializing an object of type…

Trabajando en una aplicación asp.net MVC code first, tenía una relación de muchos a muchos, no estoy seguro si esto causó el problema, pero al querer ejecutar una simple instrucción linq similar a esta:

return context.Estudiante
       .OrderBy(o => o.Nombre);

estaba obteniendo este error:

A circular reference was detected while serializing an object of type 'System.Data.Entity.DynamicProxies.Estudiante_CEA0F1…'.

Encontré la solución en este artículo, la cual consiste en establecer un valor en el constructor del DbContext.

Por default lo encuentras así:

public ApplicationDbContext()
 : base("DefaultConnection", throwIfV1Schema: false)
 {
 }

Y tienes que agregar la línea que va entre las llaves:

public ApplicationDbContext()
 : base("DefaultConnection", throwIfV1Schema: false)
 {
    this.Configuration.ProxyCreationEnabled = false;
 }

Y listo, ya con esto se elimina el error mencionado.

P.D. Si tu problema se debe a que estás tratando de regresar un JsonResult con el serializador que viene con ASP.NET, entonces te recomiendo que en vez de seguir la solución anterior, mejor utilices Json.Net. Puedes añadir la librería así:

using Newtonsoft.Json;

Y ver ejemplos aquí.