2009-09-18 19 views
13

Sto appena iniziando a imparare un po 'sul framework di entità e non ho molta esperienza con ORM.Impostare la proprietà del modello su boolean in Entity Framework

Nella mia piccola app ho una tabella, questa tabella sql server ha diverse colonne tra cui un PrimaryKey (int) un Name (stringa) e un Flag (tinyint).

Quando ho importato questa tabella in esso automaticamente assegnato il tipo di dati di Flag come un byte. Questo va bene, ma la bandierina in realtà dovrebbe essere un valore booleano, così ho

  1. fatto clic sul Dettagli Mapping
  2. selezionati Miei proprietà Bandiera
  3. cambiato il tipo da Byte a Boolean
  4. ricostruito l'applicazione

poi ho ottenuto questo errore:

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'.

C'è un modo per avere

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

e hanno Flag Salva per 1 nel database?

+0

Perché mai avresti bisogno di questo invece di un bool? –

+0

@JonasStensved il problema era che la tabella del database che stavo usando aveva il tipo di dati errato al suo interno. Una volta che ho cambiato la tabella per usare un 'bit' invece di un' byte', allora tutto ha funzionato perfettamente. –

risposta

16

Si potrebbe cambiare il tipo di dati MyFlag per bit nel database.

+1

Grazie, bit è sicuramente il tipo di dati corretto da utilizzare in questa situazione –

+0

E se utilizzo una vista? –

+0

@Bruno cosa intendi? –

2

Penso che per lo tinyint sarà necessario creare una classe parziale e utilizzare un campo separato che legge/scrive in modo appropriato in quel campo. Tuttavia, il framework interpreterà correttamente i campi bit come boolean.

Si potrebbe provare qualcosa di simile sotto il parziale ..

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

Grazie, hai perfettamente ragione, avrei invece dovuto usare bit. –

+0

Nessun problema, è passato prima. –

Problemi correlati