Есть ли способ передать объекты C # в хранимую процедуру SQL - PullRequest
0 голосов
/ 05 декабря 2011

Некоторая предыстория проблемы:

У меня есть иерархия объектов, которая выглядит следующим образом: ER diagram of the database

У каждого 'CallAction' будет очередь или ИЛИ вопрос, основанный на 'ActionType».Когда рабочий процесс создается через веб-сайт, он ограничивается двумя уровнями вопросов.Все это было реализовано в C # и таблицах, созданных в SQL Server.Теперь мне нужно найти способ добавить все это в базу данных.

Поскольку я расширяю Панель веб-сайта (проект с открытым исходным кодом), я пытаюсь следовать тем же стандартам, которые они использовали, это означает, что каждый вызовв базу данных выполняется с помощью хранимых процедур.

Мой вопрос: есть ли способ, которым я могу просто передать «рабочий процесс» хранимой процедуре SQL и обработать несколько различных уровней в SQL, или я собираюсьПриходится ли создавать несколько хранимых процедур и обрабатывать разные уровни в моем коде C #, вызывая разные хранимые процедуры на основе иерархии?

Я также понимаю, что могу напрямую обращаться к базе данных, используя SQLCommand или LinQ, но ялучше использовать хранимые процедуры, если это возможно.

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

Нет таких вещей, как объекты в SQL Server. Вы можете передать свойства в качестве именованных параметров хранимому процессу (таким образом, нет необходимости поддерживать их порядок), и сохранить хранимый процесс, чтобы поместить их туда, куда они должны пойти: обновить, вставить, удалить.

Для всех рабочих процессов вы должны использовать матричные параметры. Google "направил сетевое матричное представление". Одна матрица будет представлять все ваши объекты и их направленные ссылки друг на друга (1 - вперед, -1 - назад). Если вы хотите немного поумнеть, вместо использования чисел вы можете создать строковую матрицу, которая хранит имена объектов вместе с указанием направления. Если вы умножите направление на действительное число, вы получите вес соединения (например, вероятности).

Но ВСЕ это очень отсталый способ сделать это. Вы должны создать этот тип адаптеров в C # и выполнять массовые вставки / обновления.

Извините, я не мог быть более полезным. Удачи.

РЕДАКТИРОВАТЬ: , поскольку ваш «рабочий процесс» больше похож на онтологию, чем на реальный рабочий процесс, вы можете увидеть SPARQL и тому подобное - специфичные для онтологии языки SQL. Или Google "хранение онтологий в базах данных SQL"

2 голосов
/ 05 декабря 2011

Если вы можете выразить иерархию в XML, то вы можете передать ее как тип данных XML в ваш хранимый процесс. Затем процесс может читать XML с использованием XPath и т. Д.

1 голос
/ 05 декабря 2011

Я думаю, CLR хранимых процедур может помочь вам:

http://msdn.microsoft.com/en-us/library/ms131094.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...