Ali*_*eza 7 .net c# entity-framework
我正在为我们的应用程序做一个简单的实体更改日志记录.出现的一个问题是,虽然DbEntityEntry.State
属性的枚举值明显是互斥的(参见MSDN),但它是使用Flags
属性定义的,并且选择的值就好像它们可以组合一样.
假设这些值互相排斥是否安全?他们为什么选择这条道路?
\n\n\n假设这些值是互斥的是否安全?
\n
如果您计划未来的兼容性,那么就不要。作者可能会添加一个值,该值可以与当前值之一组合以覆盖更广泛的状态。你最好还是屏蔽一下。
\n\n它们可能不会,但以这种方式定义会留下这个选项。
\n\n\n\n\n他们为何选择这条道路?
\n
也许,这样人们就不会认为这些价值观是相互排斥的。
\n\n大多数情况下,它允许进行模板测试,在单个测试中覆盖多个值:
\n\nif (state & (EntityState.Deleted | EntityState.Modified | EntityState.Added) != 0) \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n这是有效的,因为 的值使用enum
标志布局样式,其中每个都有不同的位设置(或故意根据另一个位进行定义):
Detached = 1,\nUnchanged = 2,\nAdded = 4,\nDeleted = 8,\nModified = 16\n
Run Code Online (Sandbox Code Playgroud)\n\n因此,的EntityState.Deleted | EntityState.Modified | EntityState.Added
值为。如果值刚刚增加,它将不起作用:8 | 16 | 4
28
Detached = 1,\nUnchanged = 2,\nAdded = 3,\nDeleted = 4,\nModified = 5\n
Run Code Online (Sandbox Code Playgroud)\n\n现在将具有与 相同的EntityState.Deleted | EntityState.Modified | EntityState.Added
值。7
EntityState.Detached | Entity.Unchanged | Entity.Deleted
用于FlagsAttribute
提供元数据,指示您正在采用前一种方法而不是后者,因此屏蔽可以起作用。它对类型本身直接产生的唯一影响在于其ToString()
工作方式,即采用这种方法时提供的值比不采用这种方法时更有意义。