c# – 使用枚举作为EF的主键

c# – 使用枚举作为EF的主键,第1张

概述是否可以使用枚举作为表的主键?我有以下内容: public enum SpecialId : uint {}public class Thing { public SpecialId Id { get; set; }}public class MyContext : DbContext{ public DbSet<Thing> Things { get; set; 是否可以使用枚举作为表的主键?我有以下内容:

public enum SpecialID : uint {}public class Thing {     public SpecialID ID { get; set; }}public class MyContext : DbContext{     public DbSet<Thing> Things { get; set; }}

但是我在初始化时遇到以下错误:

An unhanded exception of type ‘system.invalIDOperationException’ occurred in EntityFramework.dll

Additional information: The key component ‘ID’ is not a declared property on type ‘Thing’. Verify that it has not been explicitly excluded from the model and that it is a valID primitive property.

这确实说它需要是一个原始的(枚举只能浇铸到primitave)但EF post around enums表示这是可能的

Enums as keys

In addition,propertIEs of enum types can participate in the deFinition of primary keys,unique constraints and foreign keys,as well as take part in concurrency control checks,and have declared default values.

我做错了什么还是根本不支持?

在一方面,我不知道我可以使用未映射到其上的另一个属性来破解此功能,以将密钥转换为枚举.这不是我正在寻找的答案

解决方法 这不起作用,因为您的枚举基于uint. EF通常不支持无符号整数类型(即,您可以对属性使用uint类型),因此它也不适用于枚举属性.

我个人不是枚举键的忠实粉丝.这只是几个原因:

>使用枚举定义,数据库中的值可能很容易失去同步>如果数据库生成密钥,则可以将其打开 – 通常数据库开始从1生成ID,但第一个枚举成员为0>枚举类型通常只有几个常量/成员.虽然可以使枚举基础类型的范围内的值但在枚举类型中没有相应的常量(并且EF支持这种情况),但这违背了使用枚举类型的目的

总结

以上是内存溢出为你收集整理的c# – 使用枚举作为EF的主键全部内容,希望文章能够帮你解决c# – 使用枚举作为EF的主键所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1219893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存