2011-06-14 13 views
5

Quiero crear primeros modelos de código EF 4.1 a partir de un esquema de base de datos SQL existente y me pregunto si es posible hacer algún tipo de conversión de datos de propiedad.Cómo hacer conversión de tipo de propiedad en EF 4.1 Código Primero

Por ejemplo, tengo una tabla existente "Foo" tener un campo como este:

isTrue char(1) 'valid values are "Y" or "N" 

En mi EF 4.1 Código Primer modelo, quiero convertir este campo en un tipo booleano como:

public class Foo 
{ 
    public bool isTrue { get; set; } 
} 

¿Es esto posible en EF 4.1 Code First extendiendo DBContext o agregando código adicional en el modelo o EntityTypeConfiguration <> subclase? En caso afirmativo, ¿alguien me puede señalar un enlace o alguna documentación sobre cómo hacerlo? La refacturación de los campos de la base de datos no es posible en este momento.

Respuesta

2

No es posible que EF haga la conversión.

Una posible solución es hacer caso omiso de EF la propiedad bool, y el uso de una propiedad de envoltura que convierte true a "Y" y false-"N".


Si normalmente necesita este tipo de flexibilidad, le sugiero que busque marcos más maduros.

NHibernate, por ejemplo, admite este requisito de fábrica, especificando YesNo como el tipo de asignación.

4

Es posible usar un campo no mapeado que es público que usa un campo interno y luego puede guardar y recuperar con el código primero y hacer la asignación aquí. Esto haría que hay que hacer para cada campo que necesita ser convertido o, por supuesto, simplied con un método de ayuda

internal string YesNo { get; set; } 

private bool _bYesNo; 
[NotMapped] 
public bool bYesNo 
{ 
    get{return (YesNo == "Y") ? true : false;} 
    set{_bYesNo = value;YesNo = (bYesNo) ? "Y" : "N";} 
} 
+8

Iba a darle su voto y luego vi la notación húngara. Evens fuera. : p –

1

que tenían el mismo problema y la solución siguiente funcionó de maravilla para mí !!

Entity Framework and Oracle Boolean

En mi código de un campo de tabla sólo se parece a un valor lógico normal, pero en la base de datos es un char (1): El modelo EF convertirlo en "Y" o "N" y ahorra a la base de datos. También hago el mismo truco para Guid en char (36).

+1

El enlace está roto. –

Cuestiones relacionadas