我首先与MySQL 5一起使用Entity Framework 5代码。在我的一个模型中,我使用的是枚举:
public class CoolModel
{
public int Id { get; set; }
public Coolnesses Coolness;
}
public enum Coolnesses { SomewhatCool, KindaCool, Cool, VeryCool }
public class EFEnumTestContext : DbContext
{
public DbSet<CoolModel> CoolStuff { get; set; }
public EFEnumTestContext()
{
this.Configuration.ProxyCreationEnabled = false;
}
}
但是当使用这个模型时,会发生一些奇怪的事情。我只是尝试将一些项添加到数据库中,然后检索它们:
class Program
{
static void Main(string[] args)
{
using (var context = new EFEnumTestContext())
{
context.CoolStuff.Add(new CoolModel() { Coolness = Coolnesses.Cool });
context.CoolStuff.Add(new CoolModel() { Coolness = Coolnesses.SomewhatCool });
context.CoolStuff.Add(new CoolModel() { Coolness = Coolnesses.KindaCool });
context.CoolStuff.Add(new CoolModel() { Coolness = Coolnesses.VeryCool });
context.SaveChanges();
foreach (var coolThing in context.CoolStuff)
{
Console.WriteLine(coolThing.Id.ToString() + ": " + coolThing.Coolness);
}
}
}
}
但是在执行我的程序时,我注意到我的数据库不包含枚举列。乍一看,我的程序确实有效,但只是因为在第一个Console.WriteLine()
期间,它仍然会从内存中打印出来。
经过几次搜索后我发现more people have run into this behavior,但所有迹象都表明它是.NET4与.NET4.5的问题。我刚刚开始创建一个控制台应用程序,从.NET4.5开始作为目标平台,将EF5新添加到项目中并发生相同的行为。我开始认为它可能是Entity Framework的MySQL提供程序,它不支持枚举的生成。这可能是它还是我在某个地方遗忘了什么?
提前致谢。
更新
我刚刚尝试使用SQL Server,但结果是一样的:表中没有枚举字段的列。那可能不是MySQL的提供者,但是我错过了什么呢?
答案 0 :(得分:0)
找到它。像往常一样,这是愚蠢的事情。
在我的CoolModel
上,我将Coolness
声明为字段,而不是属性。只需将{ get; set; }
添加到修复它的代码行。
public class CoolModel
{
public int Id { get; set; }
public Coolnesses Coolness { get; set; }
}