0

我首先将 Entity Framework 5 代码与 MySQL 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()它仍然从内存中打印出来。

经过几次搜索后,我发现更多人遇到了这种行为,但所有迹象都表明这是 .NET4 与 .NET4.5 的问题。我刚刚从 .NET4.5 作为目标平台开始创建了一个控制台应用程序,将 EF5 新添加到项目中,并且发生了相同的行为。我开始认为它可能是不支持枚举生成的实体框架的 MySQL 提供程序。可能是这样,还是我在某个地方忘记了什么?

提前致谢。

更新

我刚才试着让它与 SQL Server 一起工作,但结果是一样的:表中没有枚举字段的列。那么它可能不是 MySQL 提供程序,但是我错过了什么?

4

1 回答 1

0

找到了。和往常一样,这很愚蠢。

在我的CoolModel我声明Coolness为一个字段,而不是一个属性。只需添加{ get; set; }到代码行即可修复它。

public class CoolModel
{
    public int Id { get; set; }
    public Coolnesses Coolness { get; set; }
}
于 2013-07-15T09:12:04.970 回答