好吧,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。我的错。 –