Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 微软什么时候会';s EF6团队是否添加完整的枚举支持?_C#_Entity Framework_Enums_Visual Studio 2013 - Fatal编程技术网

C# 微软什么时候会';s EF6团队是否添加完整的枚举支持?

C# 微软什么时候会';s EF6团队是否添加完整的枚举支持?,c#,entity-framework,enums,visual-studio-2013,C#,Entity Framework,Enums,Visual Studio 2013,微软的EF6团队什么时候会添加完整的枚举支持 下面是示例代码片段。vs2013,EF6.0.1 自EF5以来,大概EF支持enum 但是有一个问题: 并非所有基础类型都受支持。 仅限:字节、Int16、Int32、Int64或SByte 恕我直言,微软在这方面的失败至少有三种方式: (a) 像ulong这样的类型是有效的,应该得到支持。 (b) 未创建列时,Visual Studio不会发出警告。 (c) 一个人被分配到Poco字段,并被诱使认为她/他的代码正在工作 是的,测试应该揭示这个问题,

微软的EF6团队什么时候会添加完整的枚举支持

下面是示例代码片段。vs2013,EF6.0.1

自EF5以来,大概EF支持enum

但是有一个问题:
并非所有基础类型都受支持。
仅限:字节、Int16、Int32、Int64或SByte

恕我直言,微软在这方面的失败至少有三种方式:
(a) 像ulong这样的类型是有效的,应该得到支持。
(b) 未创建列时,Visual Studio不会发出警告。
(c) 一个人被分配到Poco字段,并被诱使认为她/他的代码正在工作

是的,测试应该揭示这个问题,就像它对我一样,然而,我几乎错过了它,因为我的SQL表有大量的列

在,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; }
}
我们首先使用代码:

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

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


至于静默忽略无符号数字类型的属性,我们进行了很长时间的讨论,是保持原样还是抛出异常。我们决定保持原样,因为将其更改为throw将是一个突破性的更改,这意味着现在在EF4.x或EF5中创建的模型将在EF6中被视为无效。另外,一般来说,代码首先倾向于忽略它不理解的类型的属性,因此当前的行为有点符合一般原则。这里真正的问题是,人们不知道EF不理解无符号数字类型,因此感到惊讶。我同意EF理解无符号数字类型的期望是合理的,不幸的是EF中不支持这些类型。

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


至于静默忽略无符号数字类型的属性,我们进行了很长时间的讨论,是保持原样还是抛出异常。我们决定保持原样,因为将其更改为throw将是一个突破性的更改,这意味着现在在EF4.x或EF5中创建的模型将在EF6中被视为无效。另外,一般来说,代码首先倾向于忽略它不理解的类型的属性,因此当前的行为有点符合一般原则。这里真正的问题是,人们不知道EF不理解无符号数字类型,因此感到惊讶。我同意EF理解无符号数字类型的期望是合理的,不幸的是EF中不支持这些类型。

EF是开源的:所以请随意添加支持:)@markmnl-see(2013年12月):Julie Lerman写道:“您也可以为EF6贡献源代码(尽管EF团队完全监督)。”微软仍然控制着局面。当然,但这和它有什么关系呢?你不需要你的更改被接受就可以使用它@gerryLowry如果您的pull请求是有意义的,并且它不会破坏任何东西,那么它很可能会被接受。EF已经接受了许多pull请求。而且,这是一个非常错误的问题,微软什么时候会。。。。直接提问,在EF论坛上提问。这个问题似乎离题了,因为它几乎不是一个与代码相关的问题,在这里也不能作为StackOVerflow来回答。对于功能请求,您可以访问。EF是开源的:所以请随意添加支持:)@markmnl-see(2013年12月):Julie Lerman写道:“您也可以向EF6提供源代码(尽管由EF团队完全监督)。”微软仍在控制中。当然,但这和它有什么关系呢?你不需要你的更改被接受就可以使用它@gerryLowry如果您的pull请求是有意义的,并且它不会破坏任何东西,那么它很可能会被接受。EF已经接受了许多pull请求。而且,这是一个非常错误的问题,微软什么时候会。。。。直接提问,在EF论坛上提问。这个问题似乎离题了,因为它几乎不是一个与代码相关的问题,在这里也不能作为StackOVerflow来回答。对于您的功能请求,请转到。感谢您的解释,以及您通过Twitter的参与。FWIW,我不明白为什么要把nativ排除在外
    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