ventajas tutorial que mvc framework first español ejemplo desventajas code c# entity-framework-5 ef-database-first

c# - tutorial - Cómo usar una enumeración existente con Entity Framework DB primero



mvc entity framework español (1)

Estoy usando Entity Framework 5, DB primero. Sé cómo definir una enumeración en mi modelo y establecer el tipo de campo para esa enumeración.

Ahora, tengo el requisito de asignar un campo MyField a una enumeración que se define externamente, es decir, no en el modelo EF ( OtherNamespace.MyEnum ). El diseñador no me permite configurar el tipo a nada fuera del modelo. Intenté editar el archivo edmx manualmente, pero eso causa un error:

Error 10016: Error al resolver el elemento ''MyField''. El mensaje de excepción es: ''Referencia no resuelta'' OtherNamespace.MyEnum ''.''.

OtherNamespace.MyEnum es referenciado por mi proyecto.

¿Cómo lo haces?


Esto se puede hacer, pero requiere un pequeño sacrificio en el lado de la base de datos. Entity Framework (5 en adelante) admite la asignación de un campo a una enumeración, pero solo para byte , sbyte , short , ushort , int , uint , long o ulong .

Supongamos que tenemos la siguiente tabla de muestra:

CREATE TABLE [People]( [id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY, [Name] [varchar](50) NOT NULL, [Title] [int] NOT NULL )

Title ha sido declarado como un entero. En una base de datos real, esto podría ser una clave externa sobre una tabla de TitleTypes .

Además, supongamos que la enumeración externa a la que vamos a enlazar se define como:

namespace Enumerations { public enum TitleEnum { Mr, Mrs, Dr, None } }

Si importamos la tabla de People a un EDMX, podemos hacer clic derecho en la columna Title y Convertir a Enum.

Esto abrirá un cuadro de diálogo que nos permite especificar un nombre para la enumeración en EDMX ModelStore, definir cualquier valor para la enumeración O el enlace a una enumeración externa a través del tipo externo de referencia .

Asígnele un Nombre de tipo de TitleEnum , marque el Tipo externo de referencia y escriba Enumerations.TitleEnum en el campo provisto. Haga clic en Aceptar y asociará la columna a la enumeración externa.

Nota:

  • Si bien ambos se denominan TitleEnum, esto está actuando como un paso a la enumeración externa
  • El tipo de su columna y la enumeración externa DEBEN coincidir

Ahora, cuando creamos una nueva persona, podemos utilizar la enumeración y se traducirá en su representación Int.

Data.ScratchEntities context = new Data.ScratchEntities(); Data.Person person = new Data.Person(); person.Name = "Jane Smith"; //Note the use of the external enumeration here person.Title = Enumerations.TitleEnum.Mrs; context.People.Add(person); context.SaveChanges();