【发布时间】:2017-03-03 11:51:43
【问题描述】:
好的,Entity Framework 6.1.3,.Net Framework 4.5,这里是示例代码。
假设,我有一个这样的实体类:
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。 -
是的,默认底层类型是 int。我的错。
标签: c# .net entity-framework