2014-10-10 8 views

risposta

39

Si scopre che Entity Framework non supporta i tipi di dati unsigned. Per le colonne uint, è possibile solo memorizzare il valore in un tipo di dati firmato con un intervallo più ampio (ovvero, long). Che dire delle colonne ulong? La soluzione comune potrebbe non funzionare perché non esiste un tipo di dati firmato supportato da EF che possa contenere uno ulong senza overflow.

Dopo un po 'di riflessione, ho trovato una soluzione semplice a questo problema: è sufficiente memorizzare i dati nel tipo supportato long e trasferirli su ulong quando si accede. Potresti pensare: "Ma aspetta, il valore massimo di ulong> il valore massimo di long!" È ancora possibile memorizzare i byte di un ulong in un lungo e quindi restituirlo a ulong quando ne hai bisogno, dal momento che entrambi hanno 8 byte. Ciò consentirà di salvare una variabile ulong in un database tramite EF.

// Avoid modifying the following directly. 
// Used as a database column only. 
public long __MyVariable { get; set; } 

// Access/modify this variable instead. 
// Tell EF not to map this field to a Db table 
[NotMapped] 
public ulong MyVariable 
{ 
    get 
    { 
     unchecked 
     { 
      return (ulong)__MyVariable; 
     } 
    } 

    set 
    { 
     unchecked 
     { 
      __MyVariable = (long)value; 
     } 
    } 
} 

Il casting è unchecked per impedire le eccezioni di overflow.

Spero che questo aiuti qualcuno.

+0

Potete per favore dare un'occhiata a http://stackoverflow.com/questions/41802581/entity-framework-code-first-with-mysqlconnector-pks-and-fks-set-as-uint? – NetUser101

+0

Cosa succede se si sta tentando di lavorare con numeri più lunghi di un lungo? –

Problemi correlati