2016-04-11 8 views
1

ich den long Wert auf ein ActivityLogType verbunden zu bekommen versuchen es verbunden ist, um entweder ein create, edit und delete Aufzeichnung in der Datenbank.Eine Ausnahme vom Typ ‚System.InvalidCastException‘ aufgetreten in EntityFramework.Core.dll wurde aber nicht in Benutzercode behandelt

Es wird für ein Audit/Aktivitätsprotokoll verwendet, das benötigt wird.

public enum ActivityLogType 
{ 
    Create = 1, 
    Update = 2, 
    Delete = 3 
} 

My Getter-Methode:

public ActivityType GetType(ActivityLogType type) 
{ 
    var id = (long)type; 

    Console.WriteLine(id); // <---- this produces a 1 in the console. So the cast works? 

    return _context.ActivityTypes.Where(x => x.Id == id).FirstOrDefault(); // <-- This line throws the error 
} 

UPDATE 1

un-Glück vorgeschlagen (long)ActivityLogType.Create mit dem gewünschten Ausgang zu erhalten. Ich versuchte dies: (noch nicht funktioniert)

public ActivityType GetType(ActivityLogType type) 
{ 

    switch (type) 
    { 
     case ActivityLogType.Create: 
      return _context.ActivityTypes.Where(x => x.Id == (long)ActivityLogType.Create).FirstOrDefault(); 
     case ActivityLogType.Update: 
      return _context.ActivityTypes.Where(x => x.Id == (long)ActivityLogType.Update).FirstOrDefault(); 
     case ActivityLogType.Delete: 
      return _context.ActivityTypes.Where(x => x.Id == (long)ActivityLogType.Delete).FirstOrDefault(); 
     default: 
     return null; 
    } 

} 

UPDATE 2

Hier ist die ActivityType Einheit

public class ActivityType 
{ 

    public ActivityType() 
    { 
     this.Activities = new HashSet<Activity>(); 
    } 

    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Id { get; set; } 

    [Display(Name = "Label")] 
    public string Label { get; set; } 

    [Display(Name = "Display Order")] 
    public int Order { get; set; } 

    [Display(Name = "Is Active")] 
    public bool IsActive { get; set; } 

    [Display(Name = "Activities")] 
    public virtual ICollection<Activity> Activities { get; set; } 
} 
+0

und was 'ACTIVITY 'hier –

+0

@ un-Glück ist es ein' DbSet ' – Rijnhardt

+0

@ un-lucky' öffentliche virtuelle DbSet < ActivityType> ActivityTypes {erhalten; einstellen; } 'in meinem' DbContext.cs' – Rijnhardt

Antwort

0

du versuchen:

long id= Int64.Parse(Convert.ChangeType(type, Enum.GetUnderlyingType(type.GetType())).ToString()); 
Verwandte Themen