Dies kann getan werden, aber es erfordert ein wenig Opfer auf der Datenbankseite. Entity Framework (5 aufwärts) unterstützt das Zuordnen eines Feldes zu einer Aufzählung, sondern nur für byte
, sbyte
, short
, ushort
, int
, uint
, long
oder ulong
Typen.
wird angenommen, dass wir die folgende Beispieltabelle haben:
CREATE TABLE [People](
[id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [varchar](50) NOT NULL,
[Title] [int] NOT NULL
)
Title
wurde als Integer deklariert. In einer realen Datenbank könnte dies ein Fremdschlüssel für eine TitleTypes
Tabelle sein.
Auch nehmen wir an, dass die externe Aufzählung, die wir in so definiert ist binden werden werden:
namespace Enumerations
{
public enum TitleEnum
{
Mr,
Mrs,
Dr,
None
}
}
Wenn wir die People
Tabelle in eine EDMX importieren können wir direkt an der Säule Title
klicken und konvertieren
ENUM
Dadurch wird ein Dialogfeld ermöglicht es uns, einen Namen für die Zählung in t angeben bringen Er EDMX ModelStore, definieren Sie beliebige Werte für die Enumeration ODER Link zu einer externen Enumeration über Referenz externen Typ.
Geben Sie einen Typnamen TitleEnum
, überprüfen Sie Referenz externen Typ, und geben Sie Enumerations.TitleEnum
in das Feld zur Verfügung gestellt. Klicken Sie auf OK, und die Spalte wird der externen Enumeration zugeordnet.
Hinweis:
- Während beide TitleEnum genannt werden, diese an die externe Enumeration als Pass-Through handelt
- Die Art Ihrer Spalte und die externe Aufzählung müssen übereinstimmen
Wenn wir nun eine neue Person erstellen, können wir die Aufzählung verwenden und sie wird in ihre Int-Repräsentation übersetzt.
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();
Ihr zu tun einige zusätzliche Logik zu haben, geht das bekommen, könnten Sie, dass in der Setter setzen. – Botonomous
@Dunbar was meinst du? Kannst du genauer sein? –
Wie im Property-Setter muss eine nicht zugeordnete Instanz des Objekts festgelegt werden, das Sie wirklich festlegen möchten. – Botonomous