问题的一些背景:
我有一个对象层次结构,如下所示:
每个'CallAction'将基于'ActionType'具有队列或问题 当通过网站创建工作流时,它仅限于2个级别的问题。所有这些都是在C#和SQL Server中创建的表中实现的。我现在需要找到一种方法将这一切添加到数据库中。
当我扩展网站面板(一个开源项目)时,我正在尝试遵循他们一直使用的相同标准,这意味着每次使用存储过程完成对数据库的调用。
我的问题是:有什么方法可以将'工作流'传递给SQL存储过程并处理SQL中的多个不同级别,或者我将不得不创建多个存储过程并处理不同级别的我的C#代码根据层次结构调用不同的存储过程?
我也理解我可以使用SQLCommand
或LinQ
直接访问数据库,但如果可能,我宁愿使用存储过程。
答案 0 :(得分:3)
没有SQL Server中的对象。您可以将属性作为命名参数传递给存储过程(这种方式不需要维护它们的顺序),并将存储过程放在需要它们的位置:更新,插入,删除。
对于整个工作流程,您应该使用矩阵参数。谷歌“定向网络矩阵表示”。然后,单个矩阵将表示您的所有对象及其相互之间的定向链接(1 - 向前,-1 - 向后)。如果你想获得一点点发烧友,而不是使用数字,你可以创建一个字符串matric,它存储对象名称和方向。如果将方向乘以实数,则会得到连接权重(例如概率)。
但是这一切都是一种非常倒退的方式。您应该在C#中创建这种适配器,并进行批量插入/更新。
抱歉,我无法提供更多帮助。祝你好运。
编辑,因为您的“工作流程”看起来更像是一个本体而不是真正的工作流,您可以看到SPARQL等特定于本体的SQL语言。或谷歌“在SQL数据库中存储本体”
答案 1 :(得分:2)
如果您可以用XML表示层次结构,那么您可以将其作为XML数据类型传递给存储过程。然后,proc可以使用XPath等读取XML。
答案 2 :(得分:1)
我认为 CLR存储过程可以帮助您: