DataSet — обеспечение данных PrimaryKey при заполнении запросом, который является внешним соединением

При заполнении DataSet я использую значение «AddWithKey» для действия MissingSchemaAction DataAdapter. Согласно MSDN:

Добавление сведений о схеме в DataSet перед заполнением его данными гарантирует, что ограничения первичного ключа включены в объекты DataTable в DataSet.

Но когда я делаю следующее:

DataColumn[] foo = TheDataSet.Tables["Table1"].PrimaryKey;

Я получаю foo.Length 0. Есть ли что-то еще, что мне нужно сделать, кроме этого?:

string TheQuery = "SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table1.EVENT_NUM = Table2.EVENT_USER_NUM;
using (SqlDataAdapter TheDataAdapter = new SqlDataAdapter(TheQuery, TheConnection)
{
    TheDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
    TheDataAdapter.Fill(TheDataSet, "Table1");
}

Обратите внимание, если мой запрос был:

string TheQuery = "SELECT * FROM Table1";

Все было бы хорошо. Но я не получаю PrimaryKey, если есть соединение. Возможно ли это (получить первичный ключ)?

РЕДАКТИРОВАТЬ: Сначала я не понял, что это ПРИСОЕДИНЯЕТСЯ. Хотя я тестировал INNER JOINS, которые возвращали бы PrimaryKey. Виновником, кажется, является тот факт, что это ВНЕШНЕЕ СОЕДИНЕНИЕ. Таким образом, я изменил название.


person JustLooking    schedule 11.06.2010    source источник
comment
Есть ли у таблицы первичный ключ?   -  person SLaks    schedule 11.06.2010
comment
Новая информация: да, есть первичный ключ, но я только что понял, что это был запрос, который был JOIN (обе таблицы имеют первичный ключ)   -  person JustLooking    schedule 11.06.2010
comment
пожалуйста, не включайте в заголовок такие теги, как C#. Держите их в тегах, где они принадлежат.   -  person John Saunders    schedule 11.06.2010


Ответы (1)


Из msdn:

Если SelectCommand возвращает результаты ВНЕШНЕГО СОЕДИНЕНИЯ, DataAdapter не будет устанавливать значение PrimaryKey для результирующего DataTable. Вы должны определить PrimaryKey самостоятельно, чтобы обеспечить правильное разрешение повторяющихся строк.

person JustLooking    schedule 24.02.2011