Ok, Entity Framework 6.1.3, .Net Framework 4.5, und hier ist Beispielcode.Warum Uint Enums in Entity Framework ignoriert werden
Angenommen, ich habe eine Entity-Klasse wie folgt aus:
public enum IdiocyLevel : uint { ExtremlyDumb, MaybeNotDumb, SmartEnough }
public enum SpreadLevel : byte { NoBodyUseIt, CommonUse, DeFactoStandart }
public class FrameworkReview
{
public int Id { get; set; }
public String FrameworkName { get; set; }
public IdiocyLevel Idiocy { get; set; }
public SpreadLevel Spread { get; set; }
public override string ToString() { return String.Format("{0}:{1} - {2}, {3}", Id, FrameworkName, Spread, Idiocy); }
}
Sehr einfach. Id Schlüssel, String und zwei Enum-Werte. Die erste Enumeration wird als uint
, die zweite als byte
gesichert.
Ich habe eine DbContext
Klasse wie folgt:
public class DatabaseContext : DbContext
{
public DbSet<FrameworkReview> Frameworks { get; set; }
public DatabaseContext()
: base("Data Source=(localdb)\\v11.0; Integrated Security=True; " +
"AttachDbFilename=" + AppDomain.CurrentDomain.BaseDirectory + "enum.mdf")
{
}
}
Nun, wenn ich diese Klassen verwenden, meine erste Aufzählungs immer als Standardwert gespeichert ist:
class Program
{
static void Main(string[] args)
{
FrameworkReview originalReview = new FrameworkReview()
{
FrameworkName = "EntityFramework",
Idiocy = IdiocyLevel.SmartEnough,
Spread = SpreadLevel.DeFactoStandart
};
Console.WriteLine(originalReview);
int storedReviewId = 0;
using (DatabaseContext dbContext = new DatabaseContext())
{
FrameworkReview storedReview = dbContext.Frameworks.Add(originalReview);
dbContext.SaveChanges();
Console.WriteLine(storedReview);
storedReviewId = storedReview.Id;
}
using (DatabaseContext dbContext = new DatabaseContext())
{
FrameworkReview readedReview = dbContext.Frameworks.Find(storedReviewId);
Console.WriteLine(readedReview);
}
Console.ReadKey(true);
}
}
wird der Ausgang sein
0:EntityFramework - DeFactoStandart, SmartEnough
1:EntityFramework - DeFactoStandart, SmartEnough
1:EntityFramework - DeFactoStandart, ExtremlyDumb
Warum? EF erlaubt mir nicht, Uint-Werte zu speichern (was ist Standard für C# enums)? Ist das irgendwo in der Dokumentation angegeben?
Der Standard zugrunde liegende Typ von C# Aufzählungen ist 'int'. –
Yap, Standard zugrunde liegenden Typ es ist Int. Mein Fehler. –