Questo può essere fatto, ma richiede un piccolo sacrificio sul lato del database. Entity Framework (5 in poi) supporta la mappatura di un campo per un'enumerazione, ma solo per byte
, sbyte
, short
, ushort
, int
, uint
, long
o ulong
tipi.
Supponiamo di avere la seguente tabella di esempio:
CREATE TABLE [People](
[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
[Title] [int] NOT NULL
)
Title
è stato dichiarato come un intero. In un database reale, questa potrebbe essere una chiave esterna su una tabella TitleTypes
.
Inoltre, supponiamo che l'enumerazione esterno che stiamo per essere legando in è definito come:
namespace Enumerations
{
public enum TitleEnum
{
Mr,
Mrs,
Dr,
None
}
}
Se importiamo la tabella People
in un EDMX possiamo fare clic destro sulla colonna Title
e conversione in eNUM
si aprirà una finestra di dialogo che ci permette di specificare un nome per il censimento nel t he EDMX ModelStore, definire eventuali valori per il conteggio O collegamento a un elenco esterno tramite Tipo di riferimento esterno.
Assegnare un tipo Nome TitleEnum
, verificare Tipo di riferimento esterno e digitare Enumerations.TitleEnum
nel campo fornito. Fare clic su OK e associerà la colonna all'enumerazione esterna.
Nota:
- Mentre entrambi sono chiamati TitleEnum, che agisca come un passthrough alla enumerazione esterna
- il tipo di colonna e l'enumerazione esterno deve corrispondere
Ora, quando creiamo una nuova persona, possiamo utilizzare l'enumerazione e sarà tradotta nella sua rappresentazione Int.
Data.ScratchEntities context = new Data.ScratchEntities();
Data.Person person = new Data.Person();
person.Name = "Jane Smith";
//Note the use of the external enumeration here
person.Title = Enumerations.TitleEnum.Mrs;
context.People.Add(person);
context.SaveChanges();
La vostra intenzione di avere a che fare un po 'di logica in più per ottenere che, si potrebbe mettere che nel setter. – Botonomous
@Dunbar cosa intendi? Può essere più preciso? –
Come nel setter della proprietà, impostate un'istanza non mappata dell'oggetto che volete veramente impostare. – Botonomous