加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么使用FlagsAttribute定义EntityState枚举

发布时间:2020-12-15 07:59:25 所属栏目:百科 来源:网络整理
导读:我正在为我们的应用程序做一个简单的实体更改日志记录. 出现的一个问题是,虽然DbEntityEntry.State属性的枚举值明显是互斥的( See MSDN),但它是使用Flags属性定义的,并且选择的值就好像它们可以组合一样. 假设价值相互排斥是否安全?他们为什么选择这条道路
我正在为我们的应用程序做一个简单的实体更改日志记录.
出现的一个问题是,虽然DbEntityEntry.State属性的枚举值明显是互斥的( See MSDN),但它是使用Flags属性定义的,并且选择的值就好像它们可以组合一样.

假设价值相互排斥是否安全?他们为什么选择这条道路?

解决方法

Is it safe to assume that the values are mutually exclusive?

如果您计划将来兼容,那么没有.作者可能会添加一个值,该值可以与当前值之一结合以覆盖更广泛的状态.你最好掩盖.

它们可能没有,但是以这种方式定义会使该选项保持打开状态.

Why did they chose this path?

或许,这样人们就不会认为这些价值观是相互排斥的.

大多数情况下,它允许在一次测试中进行掩盖测试,覆盖多个值:

if (state & (EntityState.Deleted | EntityState.Modified | EntityState.Added) != 0)  …

这是有效的,因为枚举的值使用标志布局样式,其中每个都设置了不同的位(或根据另一个有意定义):

Detached = 1,Unchanged = 2,Added = 4,Deleted = 8,Modified = 16

因此,EntityState.Deleted | EntityState.Modified | EntityState.Added的值为8 | 16 | 4这是28.如果只是递增的值,它将无法工作:

Detached = 1,Added = 3,Deleted = 4,Modified = 5

现在EntityState.Deleted | EntityState.Modified | EntityState.Added的值为7,与EntityState.Detached相同Entity.Unchanged | Entity.Deleted.

FlagsAttribute用于提供元数据,表明您采用的是前一种方法而不是后者,因此屏蔽可以正常工作.它直接对类型本身产生的唯一影响是ToString()如何工作,这是为了在采用这种方法时提供更有意义的值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读