c#-在关系数据库中持久保存实体顺序的最佳模式是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-在关系数据库中持久保存实体顺序的最佳模式是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2009字,纯文字阅读大概需要3分钟。
内容图文
![c#-在关系数据库中持久保存实体顺序的最佳模式是什么?](/upload/InfoBanner/zyjiaocheng/883/13e7af0d196b49899f70d4fde3c20785.jpg)
环境:具有EF(数据库优先控制数据库设计)和Sql Server的ASP.NET MVC应用程序.
我有许多具有用户生成的属性的实体.我需要一种让用户能够指定这些元素的顺序的方法.
稍微详细一点:用户可以创建一个“模板”,然后可以向其中添加“属性”.这些“属性”需要排序.还有> = 4其他不同的实体类型,它们也需要用户指定的排序.
我对此的前端方面没有问题,但是我想知道什么是将元素顺序保留在sql server中的最佳方法.
对我来说,显而易见的解决方案是为每个实体提供一列“订单”(或另一个非关键字名称),并在重新排序后(例如,将元素#4移动到#2)更新所有受影响的实体.
这是解决这个问题的最好方法吗?
解决方法:
这听起来不像是一个小项目,并且您可能在SortOrder属性之上还进行了其他各种动态自定义.
向您的实体表添加SortOrder列当然不是一个坏方法,但是这种方法可能会使用不一定属于该实体的信息阻塞数据(特别是如果多个用户可以自定义相同的实例).
因此,我为您提供了一个替代方案:
>将CustomizationNode表(或类似内容)添加到数据库中
在这里,您可以存储SortOrder以及潜在的其他类型的元数据和用户自定义,它们不一定是概念实体的一部分.
然后,如果您需要添加/更改/删除任何自定义信息,则只需要在一个表而不是多个表中进行.而且,您无需在更改自定义功能时就迁移实体.
根据您的情况,可以通过以下几种方式之一链接它们:
1.将单列CustomizationNodeId添加到每个实体表
这涉及对每个实体实例进行一次自定义,这是最简单的解决方案.
同样,可以在相同类型(甚至不同类型)的多个实体之间共享一种自定义设置,尽管这可能意义不大
2.将多个列EntityXId,EntityYId添加到CustomizationNode表.
原则上,将仅填充这些ID字段之一,而其他字段将为空.似乎有些“偏离”,但不一定是错误的方法.
虽然您失去了在同一类型的多个实体之间共享自定义的能力,但是您却获得了为每个实体和其他FK(例如UserID)拥有多个自定义的能力.这将允许您进行每个用户的自定义.
3.在每个EntityX和CustomizationNode之间添加一个链接表
这是最复杂但也是最通用的解决方案.它包含向您要链接的每个表添加一个带有FK的表.
您获得的一项重要好处是额外的去耦.定制和实体在不影响彼此的情况下不知道彼此的存在和变化.
此外,您可以在这些链接表中添加其他元数据,这样您就可以在上述1和2的所有内容的基础上进行版本控制.
最重要的是,如果您的应用程序具有很高的动态性和可定制性,那么您可能希望将“元数据”与实际“数据”分开存储.
内容总结
以上是互联网集市为您收集整理的c#-在关系数据库中持久保存实体顺序的最佳模式是什么?全部内容,希望文章能够帮你解决c#-在关系数据库中持久保存实体顺序的最佳模式是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。