Entity Framework: Zuordnung von tinyint zu boolean

8

Standardmäßig weist Entity Framework tinyint auf Byte zu.

Ich habe versucht, den zugrunde liegenden Typ nach der Generierung auf Boolean zu ändern, aber einen Kompilierungsfehler

zu bekommen

Die angegebene Memberzuordnung ist nicht gültig. Der Typ 'Edm.Boolean [Nullable = False, DefaultValue =]' von Mitglied blah ...

ist das in 4.0 möglich?

Es war nicht meine Idee, die tinyint-Spalte als Boolean zu verwenden. Dies wurde automatisch von einem anderen Team mit Hibernate gemacht, das dies offensichtlich für die MySQL-Kompatibilität tut. offensichtlich Tinyint hat mehr Werte als 2. Ich bin auf der Suche nach einer Möglichkeit, es so zu mappen, dass Anyting für 1 akzeptieren ist falsch, oder alles, was für 0 akzeptiert ist wahr. entweder würde für mich arbeiten

Gibt es eine Möglichkeit, einen Typ-Übersetzer der Art in EF einzubinden?

    
Sonic Soul 25.10.2010, 17:15
quelle

2 Antworten

3

Von der MSDN-Seite auf Integer-Typen sehen wir, dass der tinyint -Typ für ein steht Ganzzahl von 0 bis 255.

A bool repräsentiert dagegen nur eine binäre 0 oder 1 .

Ändern der Standardzuordnung von byte nach bool (wenn es sogar möglich wäre, was nach diese Seite scheint nicht zu sein) ergibt keinen Sinn - wie würden Sie zum Beispiel den Wert 42 (ein gültiger tinyint ) als bool darstellen?

Wenn Sie eine Entität mit einer Eigenschaft vom Typ bool benötigen, würde ich vorschlagen, sie einer Spalte vom Typ bit .

    
Donut 25.10.2010, 17:21
quelle
4

Tatsächlich ist der Hauptgrund, warum oft ganze Zahlen in der Datenbank verwendet werden, darauf zurückzuführen, dass viele Datenbank-Engines keine Indizes für Bitfelder zulassen. Die meisten Datenbank-Engines versuchen, mehrere Bitfelder in einem "internen" Byte zu einem sicheren Speicherplatz zu gruppieren. Daher ist das Bitfeld nicht wirklich für die Indizierung verfügbar.

Der Defacto-Standard besagt, dass 0 gleich falsch und alle anderen Werte gleich wahr sind. EF unterstützt diese Art der Zuordnung jedoch nicht. Die beste Methode verwendet ein privates Schattenfeld, das als Byte deklariert ist und EF zugeordnet ist. Zweitens erstellen Sie eine Alias-Boolean-Eigenschaft, die von Ihrem Code verwendet wird.

Das Zuweisen privater Eigenschaften mit EF erfordert einen Reflexionscode.

    
Swordfish 25.10.2014 22:01
quelle

Tags und Links