API de MVC4 en Azure WebSites o Azure Cloud Services : ‘System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption’

Recibo este error cuando bash implementar mi proyecto de API web en los sitios web en la nube y en los servicios alojados en la nube en Azure:

"{"ExceptionType":"System.TypeLoadException","Message":"Could not load type 'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption' from assembly 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.","StackTrace":"\r\nServer stack trace: \r\n at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)\r\n at System.Reflection.RuntimeAssembly.GetExportedTypes()\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)\r\n at System.Web.Http.WebHost.WebHostHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)\r\n at System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache()\r\n at System.Lazy`1.CreateValue()\r\n\r\nException rethrown at [0]: \r\n at System.Reflection.RuntimeAssembly.GetExportedTypes(RuntimeAssembly assembly, ObjectHandleOnStack retTypes)\r\n at System.Reflection.RuntimeAssembly.GetExportedTypes()\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)\r\n at System.Web.Http.WebHost.WebHostHttpControllerTypeResolver.GetControllerTypes(IAssembliesResolver assembliesResolver)\r\n at System.Web.Http.Dispatcher.HttpControllerTypeCache.InitializeCache()\r\n at System.Lazy`1.CreateValue()\r\n at System.Lazy`1.LazyInitValue()\r\n at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.InitializeControllerInfoCache()\r\n at System.Lazy`1.CreateValue()\r\n\r\nException rethrown at [1]: \r\n at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(HttpRequestMessage request)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)"}" 

Aquí está el mensaje:

 "Could not load type 'System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption' from assembly 'System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'." 

Ocurre cuando bash golpear cualquiera de mis API desde el sitio remoto. Sé que no son mis 500 errores porque algunos de mis API no los lanzan independientemente de lo que suceda.

Una cosa a tener en cuenta y no estoy seguro de si esto afectaría algo es que inicié este proyecto orientado a .NET 4.5, pero luego lo cambié a 4.0 cuando los sitios web de Azure dijeron que no son compatibles con 4.5.

No puedo encontrar nada sobre esto excepto este enlace: http://support.appharbor.com/discussions/problems/4822-internal-server-error-500-mvc-4-web-api

excepto que ese tipo está usando app-harbor, y aun así todavía no hay solución. Gracias de cualquier ayuda.

Tiene razón al comenzar con .NET 4.5 y deshacer el problema, aquí está la documentación oficial sobre este problema y un enlace.

Cambiar un proyecto de ASP.NET MVC 4 a target 4.0 de 4.5 no actualiza la referencia del ensamblado EntityFramework: si cambia un proyecto de ASP.NET MVC 4 a target 4.0 después de apuntar a 4.5, la referencia al ensamblado EntityFramwork seguirá apuntando a la versión 4.5 . Para solucionar este problema, reinstale el paquete EntityFramework NuGet.

Reinstalar EntityFramework después de cambiar el proyecto a .NET 4.0 hizo el truco.

Referencia: http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815

Esto me sucedió cuando compilé un proyecto MVC RC en .NET 4.0 y traté de alojarlo en IIS en un servidor que no tenía instalado Visual Studio 2012 RC.

(Nota: la instalación de Visual Studio 2012 RC en el servidor también solucionó el problema, pero para la compatibilidad con versiones anteriores, la solución anterior es mucho mejor).

Así que parecía que el problema se debió a que yo volví a .NET 4 de 4.5 y la entidad no retrocedió. Parece que la Entidad 5 solo se ejecuta en .NET 4.5 y cuando la implementación esperaba 4.3.1 tenía una DLL 5.0.0 y lo estropeó todo.