EntityType ‘…’ has no key defined. Define the key for this EntityType …MVC 4

Continuando con Visual Studio 2010 y MVC 4, al ejecutar la aplicación me arrojó varios errores de este tipo:

One or more validation errors were detected during model generation:

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType ‘UserProfile’ has no key defined. Define the key for this EntityType.
….

\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet ‘UserProfiles’ is based on type ‘UserProfile’ that has no keys defined.

Al parecer el generador de entidades EF 4.x DbContest para C# aún tiene ciertas deficiencias.

Para corregir este error hay que editar las clases que se indican y agregar la anotación [Key] antes del campo de llave primaria así:

….
[Key]

public int UserId { get; set; }

Le pedirá que agregue el namespace

System.ComponentModel.DataAnnotations

Es todo…. ¡saludos!

 

 

The type ‘…’ was not mapped… MVC 4

Tengo Visual Studio 2010 e instalé el complemento de MVC 4. Generé mi aplicación MVC 4 y generé al ADO.NET EntityObject desde una conexión de base de datos. La tabla UserProfile fue cambiada agregando más campos personalizados.

Al ejecutar ka aplicación por default y tratar de ingresar a la sección login me arrojaba el siguiente error:

“The type ‘….Models.UserProfile’ was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject.”

Resulta que el MVC 4 no acepta clases entidades heredadas del tipo EntityObject. Para corregir este error hay varias formas, pero la más “fácil” es la de instalar el complemento “EF 4.x DbContext Generator for C#” que se puede descargar aquí.

Una vez instalado y reiniciado el VS 2010 procede a seguir las instrucciones indicadas en dicha página: se da click derecho sobre el editor modelo .edmx , se selecciona Add Code Generation Item… y en Installed Templates -> Visual C# -> Code, se selecciona EF 4.x DbContext Generator. Se le da un nombre al modelo y se pulsa el botón Add.

Manda un aviso de Security Warning, que puede ser ignorado pulsando “OK”. Y listo Crea un modelo de datos con la extensión .tt con clases por separado de las entidades de la base de datos.

Listo, el error antes descrito se fue.

¡Saludos!

 

 

Crear threads con c#.

Código ejemplo de cómo crear y ejecutar threads (hilos) en lenguaje C#:

using System;
using System.Threading;

namespace ProgramasEnCSharp
{
	public static class Threads
	{
		public static void MetodoThread ()
		{
			for (int i = 0 ; i < 10; i++)
			{
				Console.WriteLine("ProcesoHilo: {0}",i);
				Thread.Sleep(0);
			}
		}

		public static void Main()
		{
			Thread t = new Thread(new ThreadStart(MetodoThread));
			t.Start();

			for (int i = 0 ; i < 4; i++)
			{
				Console.WriteLine("Hilo Principal: Haciendo algun proceso..");
				Thread.Sleep(0);
			}

			t.Join();

		}
	}
}

Si se ejecuta el programa anterior, una de las probables salidas del programa seria algo como esto:

Hilo Principal: Haciendo algun proceso..
ProcesoHilo: 0
ProcesoHilo: 1
ProcesoHilo: 2
ProcesoHilo: 3
Hilo Principal: Haciendo algun proceso..
Hilo Principal: Haciendo algun proceso..
Hilo Principal: Haciendo algun proceso..
ProcesoHilo: 4
ProcesoHilo: 5
ProcesoHilo: 6
ProcesoHilo: 7
ProcesoHilo: 8
ProcesoHilo: 9