是否可以将枚举用作表的主键?我有以下内容:
public enum SpecialId : uint {}
public class Thing
{
public SpecialId Id { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Thing> Things { get; set; }
}
但我在初始化时遇到以下错误:
EntityFramework.dll中发生了'System.InvalidOperationException'类型的无法处理的异常
附加信息:关键组件“Id”不是“Thing”类型的声明属性。验证它是否未从模型中明确排除,并且它是有效的原始属性。
这确实说它需要是一个原语(枚举只能转换为primitave),但EF post around enums表明这是可能的
枚举为关键
此外,枚举类型的属性可以参与主键,唯一约束和外键的定义,也可以参与并发控制检查,并声明了默认值。
我做错了还是根本不支持?
一方面我不知道我可以使用另一个没有映射到它的属性来破解这个功能,以便将密钥转换为枚举。这是不我正在寻找的答案
答案 0 :(得分:4)
这不起作用,因为你的枚举基于uint。 EF一般不支持无符号整数类型(即你可以使用属性的uint类型),因此它也不适用于枚举属性。
我个人不是枚举键的忠实粉丝。这只是几个原因:
答案 1 :(得分:3)
看起来问题出在enum
基础类型上。
我没有找到任何信息,但快速测试显示支持以下类型
byte, short, int, long
以下不是
sbyte, ushort, uint, ulong