2009-09-18 14 views
13

Estoy empezando a aprender un poco sobre el marco de entidad y no tengo mucha experiencia con ORM.Establecer propiedad de modelo a booleano en Entity Framework

En mi pequeña aplicación tengo una tabla, esta tabla de servidor sql tiene varias columnas, incluyendo una clave principal (int) un nombre (cadena) y una bandera (tinyint).

Cuando importé esta tabla en ella asignó automáticamente el tipo de datos de los indicadores como un byte. Esto está muy bien, pero la bandera debería ser un valor lógico, por lo que

  1. hecho clic en la correspondencia detallada
  2. Seleccionado mi propiedad Bandera
  3. cambiado el tipo de byte a Boolean
  4. reconstruyó la aplicación

entonces me dio este mensaje:

Error 2019: Member Mapping specified is not valid. The type 'Edm.Boolean[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.MyItem' is not compatible with 'SqlServer.tinyint[Nullable=True,DefaultValue=]' of member 'MyFlag' in type 'MyModel.Store.MyItem'.

¿Hay una manera de tener

MyItem item = new MyItem(); 
item.Flag = true; 

y tienen bandera Guardar a 1 en la base de datos?

+0

¿Por qué necesitarías eso en vez de un bool? –

+0

@JonasStensved el problema fue que la tabla de la base de datos que estaba usando tenía el tipo de datos incorrecto. Una vez que cambié la tabla para usar un 'bit' en lugar de un' byte', todo funcionó perfectamente. –

Respuesta

16

Se puede cambiar el tipo de datos de MyFlag a bit en la base de datos.

+1

Gracias, bit es ciertamente el tipo de datos correcto para usar en esta situación –

+0

¿Y qué ocurre si estoy usando una Vista? –

+0

@Bruno ¿qué quieres decir? –

2

Creo que para el tinyint tendrá que hacer una clase parcial y usar un campo separado que leye/escribe apropiadamente en ese campo. Sin embargo, el marco interpretará correctamente los campos bit como boolean.

Usted podría intentar algo así como más adelante como el parcial ..

public partial class MyItem 
{ 
    public bool FlagBool 
    { 
     get { return Flag == 1; } 
     set { Flag = value ? 1 : 0; } 
    } 
} 
+0

Gracias, tienes toda la razón, debería haber usado bit en su lugar. –

+0

No hay problema, ya lo he pasado antes. –

Cuestiones relacionadas