C# 微软什么时候会';s EF6团队是否添加完整的枚举支持?
微软的EF6团队什么时候会添加完整的枚举支持 下面是示例代码片段。vs2013,EF6.0.1 自EF5以来,大概EF支持enum 但是有一个问题: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字段,并被诱使认为她/他的代码正在工作 是的,测试应该揭示这个问题,
并非所有基础类型都受支持。
仅限:字节、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