2016-05-01 7 views
2
public enum UserGender: byte { 
    Unknown = 0, 
    Male = 1, 
    Female = 2 
} 

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public UserGender Gender { get; set; } 
    public string Address { get; set; } 
} 

DDL Skript für die MSSQL Tabelle:Wie Enum zu MVC4-Modell aus der Datenbank laden?

CREATE TABLE UserProfile(
    UserId int IDENTITY(1,1) NOT NULL PRIMARY KEY, 
    UserName nvarchar(56) NOT NULL, 
    Email varchar(50) NOT NULL, 
    Gender tinyint NOT NULL, 
    Address nvarchar(1000) NULL 
) 

Alle Felder werden aus der Datenbank geladen, wie sie Gender ausnehmen sollte. Es wird immer mit 0 aufgefüllt. Es gibt einen offensichtlichen Schreibfehler, obwohl die Enumeration aus byte stammt.

Wie man enum den richtigen Weg lädt und es als enum im Modell behält?

+0

Welche Version von Entity Framework verwenden Sie? Enum wird in der neuesten Version sehr gut unterstützt, jedoch war es ein Problem mit der vorherigen Version. Haben Sie versucht, 'Byte' aus enum Definition zu entfernen – Satpal

+0

@Satpal: Ich bin mir nicht sicher, aber denke, dass 4.4.0.0, Laufzeitversion v4.0.30319 – Paul

+0

Ihre db und C# Typ übereinstimmen sollte, ändern Sie es zu' 'int'' anstelle von' 'byte'' –

Antwort

1

Ich glaube, neuere Version von EF unterstützt es ziemlich gut, also nehme ich an, dass Sie eine ältere Version von EF verwenden. Nicht die eleganteste Lösung, aber für ältere Versionen können Sie so etwas tun:

public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public int GenderID { get; set; } 
    [NotMapped] 
    public virtual UserGender Gender 
    { 
     get 
     { 
      return (UserGender)GenderID; 
     } 
     set 
     { 
      GenderID = Convert.ToInt32(value); 
     } 
    } 
    public string Address { get; set; } 
} 
Verwandte Themen