首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#/SQLServer应用程序中的全长位

C#/SQLServer应用程序中的全长位
EN

Stack Overflow用户
提问于 2014-06-22 10:51:31
回答 2查看 56关注 0票数 1

在我们的应用程序中,我们使用enum作为类型来定义特定的Office活动涉及什么官员,例如:在安全活动中,所涉及的角色可以是安全官员、安全控制干事、安全管理人员等。

此详细信息是完全可配置的,因此我们可以在系统中通过UI向活动添加另一个正式角色,只需将特定的位添加到bitwrise值中,此值存储在活动表的字段中,所有类型都存储在sql表中;此字段用于某些存储的过程,一些商业智能是基于此字段的。

代码语言:javascript
复制
[Flags]
public enum eFatEnumBW : long
{
  None = 0,
  SecurityOfficer = 1L << 0,
  SecurityAssistant = 1L << 1,
  //...some referee of every type you can immagine
  LastAssistantAtTheMoment = 1L << 63,
  //...
}

现在,我们的胖bitwise enum已经完全饱和,我们的客户最近被要求添加新类型的官方角色来管理新的活动。

我知道,这不是管理这种情况的最佳方法,这一选择是从8年开始的,没有问题,没有人能想象事情会如何发展,现在我们正在等待完全重写我们的应用程序,但与此同时,我们必须继续保持旧的应用程序没有什么变化。

我认为我们可以在此基础上维护旧的解决方案,只需在代码中更改long中的ulong,并在SQL-side上使用numeric(20,0),这将给我们很大的空间。

在我的结论中有一些东西我遗漏了,这会导致解决方案的不适用性?

谢谢你的建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-22 10:57:56

我不认为从longulong有什么帮助。这两种类型都有相同的位数,而且您已经用完了所有这些位数。充其量,你会得到符号位,但这不是长期的解决方案。

一个可能的解决方案是引入两个新的数据库表:

  • RefereeTypes (每个enum值都有一个条目);
  • FooReferees (一个n:n关联表,它将每个业务实体链接到一个或多个RefereeTypes

在您的代码中,而不是业务实体上的enum属性,您将拥有RefereeType的集合.这可能意味着相当的改写。

票数 1
EN

Stack Overflow用户

发布于 2014-06-22 10:55:51

我不认为你错过了什么。事实上,目前您没有使用long的全部大小,因为您没有使用低于0的范围。

不使用ulong,您可以选择继续使用long,但开始使用负值。

但正如在评论中所述,这只会得到一点好处,所以并不是真正有助于长远发展的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24350504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档