2009-09-18 17 views
13

Ich fange gerade an, etwas über das Entitätsrahmenwerk zu lernen und habe nicht viel Erfahrung mit ORMs.Modelleigenschaft auf boolean in Entity Framework setzen

In meiner kleinen App habe ich eine Tabelle, diese SQL-Server-Tabelle hat mehrere Spalten einschließlich eines PrimaryKey (int) einen Namen (String) und ein Flag (Tinyint).

Wenn ich diese Tabelle importierte, wurde automatisch der Datentyp der Flags als Byte zugewiesen. Das ist in Ordnung, aber die Flagge sollte wirklich ein boolean, so dass ich

  1. klickte auf den Mapping Details
  2. meine Flagge Eigenschaft Selected
  3. den Typ von Byte geändert Boolean
  4. die Anwendung Rebuilt

ich habe dann diesen Fehler:

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

Gibt es eine Möglichkeit

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

und hat Flagge haben, speichern zu 1 in der Datenbank?

+0

Warum sollten Sie das jemals anstelle eines Bool brauchen? –

+0

@JonasStensved das Problem war, dass die Datenbanktabelle, die ich verwendete, den falschen Datentyp hatte. Nachdem ich die Tabelle geändert hatte, um ein "Bit" anstelle eines "Bytes" zu verwenden, funktionierte alles perfekt. –

Antwort

16

Sie können den Datentyp MyFlag zu bit in der Datenbank ändern.

+1

Danke, Bit ist sicherlich der richtige Datentyp in dieser Situation zu verwenden –

+0

Und was ist, wenn ich eine Ansicht verwende? –

+0

@Bruno was meinst du? –

2

Ich denke, für die tinyint müssen Sie eine partielle Klasse erstellen und ein separates Feld verwenden, das in diesem Feld entsprechend liest/schreibt. Das Framework interpretiert bit Felder jedoch korrekt als boolean.

Man könnte so etwas wie unten als Teil versuchen ..

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

Danke, du hast vollkommen recht, ich hätte stattdessen etwas gebrauchen sollen. –

+0

Kein Problem, war schon mal durch. –