微软的EF6团队何时会增加完整的枚举支持?

时间:2013-12-10 06:33:06

标签: c# entity-framework enums visual-studio-2013

微软的EF6团队何时会添加完整的枚举支持?

示例代码段如下所示。 vs2013,EF6.0.1

自EF5以来,大概是EF支持enum。

然而有一个GOTCHA:http://msdn.microsoft.com/en-us/data/hh859576
并非所有基础类型都受支持 仅:字节,Int16,Int32,Int64或SByte。

微软,微软至少在三个方面让程序员失败了: (a)类似 ulong 的类型有效,应予以支持 (b)当未创建列时,Visual Studio会发出零警告 (c)一个人可以分配到Poco领域并且开始认为她/他的代码正在运作。

是的,测试应该揭示问题,就像它对我所做的那样,但是,我几乎错过了它,因为我的SQL表有很多列。

http://msdn.microsoft.com/en-us/data/ee712907,EF小组建议我们应该在SO处发布EF问题。

以下是代码:

namespace EF6enums
{
    public enum Country : long { Canada = 1, England = 2 }

将“long”更改为“ulong”会破坏代码。

public class EF6Poco
{
    public Int32  ID { get; set; }
    public String City { get; set; }
    public Country CountryEnum { get; set; }
}

我们正在使用Code First:

public class EnumTestContext : System.Data.Entity.DbContext
{
    public System.Data.Entity.DbSet<EF6Poco> EF6Pocos { get; set; }
}

这是Main方法:

    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new EnumTestContext())
            {
                context.EF6Pocos.Add(new EF6Poco
                   { City = "Wasaga Beach",
                     CountryEnum = Country.Canada });
                context.SaveChanges();
            }
            Console.WriteLine("Done");
            Console.ReadLine();
    }
}
}   //      namespace EF6enums

1 个答案:

答案 0 :(得分:4)

不支持ulong枚举是EDM一般不支持无符号数字类型的结果。无符号数字类型可能很有用,但我不确定ulong枚举是否有用。如果你想使用枚举类型作为位字段,那么符号无关紧要 - 在这种情况下,你只关心位和无符号,并且它的对应符号枚举类型具有相同的位数,因此你可以使用它们。 [Flags]属性也很有趣 - 它唯一影响的是.ToString()如何工作(也许.Parse(),因为这是相反的操作)。就使用枚举类型而言,它没有做任何特殊的事情 - 即你可以对有和没有[Flags]属性的枚举进行相同的操作(无论是按位操作还是非按位操作),你应该得到无论是否存在属性,都会得到相同的结果。

就静默忽略无符号数字类型的属性而言,我们长期讨论是否保持原样或抛出异常。我们决定将其保留为原样,因为将其更改为throw将是一个重大变化,并且意味着现在EF4.x或EF5中创建的模型在EF6中将被视为无效。此外,通常Code First倾向于忽略它不理解的类型的属性,因此当前行为与一般原则一致。这里真正的问题是,人们并不知道EF不理解无符号数字类型并且会出乎意料。我同意EF理解无符号数字类型的期望是合理的,不幸的是EF不支持它。