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 bekommenDie 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?
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
.
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.
Tags und Links c# entity-framework mapping