当前位置: 首页 > 编程语言 > C#

SQL表和C#枚举分享

时间:2023-04-10 17:27:06 C#

SQL表和C#枚举假设我的应用中有n种用户。我使用UserType枚举来区分它们。我需要在数据库中保留一个名为UserType的表吗?这样我就可以随时通过查表找到用户类型,而不用搜索应用程序源代码。这样做我的源代码可能会变得有点复杂。我应该承认这笔交易吗?是的,同时使用:UserType查找表和枚举为了理解数据结构,我们创建了具有定义类型的查找表,即使它们永远不会改变。这样,您还可以通过将表与此查找相关联来维护参照完整性。自动化您的枚举通过使用T4模板,您可以轻松地自动化您的业务层代码以反映数据库更改。因此,每当您更改SQL脚本以更改查找表中的值时,您只需运行模板并在枚举中创建另一个值。顺便说一句:在VisualStudio2008中单击即可执行所有T4模板。在解决方案资源管理器中选择您的解决方案,然后单击解决方案资源管理器的迷你工具栏中的图标。瞧。T4生成。MarkedEnums它们都很好用,但如果您以与业务层相同的方式使用它们,它会使T-SQL脚本复杂化。也许使用多对多关系更明智,但您不能自动创建枚举,因此在数据库层进行更改也意味着在业务层进行更改。通常在实践中,您在数据库中有一个表,在源代码中有一个相应的枚举。枚举使您可以轻松使用对您没有意义的值。在数据库中有一个表允许您执行查询并在结果中查看有意义的值+强制数据完整性(外键)。这里的挑战是保持表值与枚举值同步。但它在实践中运作良好。您可以将其设置为数据库中的int列,然后使用Flags()属性进行枚举。但是,您只能使用32个UserType(2^32)。[Flags]publicenumUserType{None=0,Viewer=1,ContentEditor=2,Editor=4,Admin=8,Root=16,Disciple=32,God=64}更新我跳过了不想阅读源代码部分。来源如何使用枚举?如果它使用数字,查找表不会影响性能并且是一个很好的参考。如果应用程序使用字符串名称,则可能更容易采用ASP.NET角色提供程序(iirc)技术,即在用户表上简单地使用UserType的索引varchar列。所以:姓名电子邮件用户类型Bobblah@blah.comadmin,author如果需要,您仍然可以拥有参考表。我坚持使用代码中的枚举解决方案,但那是因为我在角色列表中涉及的大多数项目都是静态的。所以如果角色真的需要自定义的话,一个单独的查找表会是最好的选择,但是还是用上面提到的标志系统(而不是中间的多对多表)。同样对于大量用户而言,我猜非规范化的Flags系统会更好、更快。您是否足够关注多对多方式的第三范式(但确保更好的参照完整性)。以逗号分隔的角色列表对于一小群用户来说可能同样快速且不那么麻烦。我会做。我会创建一个包含所有可能用户类型的单独表。通过这样做,您将在数据库级别关注数据的完整性。为什么它会使您的代码复杂一点?我不明白这一点。以上就是C#学习教程分享的全部内容:SQL表和C#枚举。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: