好吧,Entity Framework 6.1.3,.Net Framework 4.5,這裏是示例代碼。爲什麼uint枚舉在實體框架中被忽略
想,我有一個這樣的實體類:
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); }
}
很簡單。 Id鍵,字符串和兩個枚舉值。第一枚枚舉支持爲uint
,第二枚枚舉爲byte
。
我有一個DbContext
類是這樣的:
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")
{
}
}
現在,如果我用這個班,我的第一個枚舉總是存儲爲默認值:
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);
}
}
輸出將是
0:EntityFramework - DeFactoStandart, SmartEnough
1:EntityFramework - DeFactoStandart, SmartEnough
1:EntityFramework - DeFactoStandart, ExtremlyDumb
爲什麼? EF不允許存儲uint值(這是C#枚舉的默認值)?這是在文檔中說明的嗎?
默認的基本類型C#枚舉的是'int'。 –
Yap,默認的底層類型是int。我的錯。 –