ADO.NET DataSet - уникальное ограничение для столбцов из разных таблиц - PullRequest
1 голос
/ 11 декабря 2010

Я пишу программу на C # в .NET 3.5 в Visual Studio 2008. У меня есть DataSet с двумя таблицами DataTable, A и B. В таблице A находится столбец DataColumn Y, а в таблице B - столбец Z, плюс дополнительные столбцы вобе таблицы.Оба столбца Y и Z установлены как уникальные, автоинкрементные столбцы.

Я бы хотел, чтобы Y и Z также были уникальными между двумя из них.Например, если в таблице A уже есть строка с 3 в столбце Y, и я создаю новую строку в таблице B, и она хочет поместить 3 в столбце Z в этой новой строке, она вместо этого пропустит 3и вставьте 4.

Я попробовал что-то, что выглядит как это должно работать:

myDataSet.Tables["A"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] }));
myDataSet.Tables["B"].Constraints.Add(new UniqueConstraint(new DataColumn[] { myDataSet.Tables["A"].Columns["Y"], myDataSet.Tables["B"].Columns["Z"] }));

Но я получаю следующую ошибку в первой строке, если я запускаю приложение и онополучает этот код:

System.Data.InvalidConstraintException не обрабатывается
Message = "Невозможно создать ключ из столбцов, принадлежащих разным таблицам."
Source = "System.Data"

Причина, по которой я добавляю одну и ту же UniqueConstraint к обеим таблицам, заключается в том, что, ну, я не совсем уверен, куда еще ее поместить, чтобы она была активной.Я бы предпочел не объединять таблицы в одну, так как они имеют мало общего друг с другом, кроме столбцов Y и Z.

Кто-нибудь знает какой-нибудь способ сделать это?В документации MSDN не упоминается несколько таблиц, и похоже, что никто другой не пробовал этого.


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

То, что я закончил, на самом деле не решает мой вопрос, который я разместил здесь.Я прошу прощения у Google, надеющихся получить ответ здесь.

1 Ответ

2 голосов
/ 11 декабря 2010

В документации MSDN конкретно упоминается одна таблица данных:

Объект UniqueConstraint, который может назначаться либо одному столбцу или массиву столбцов в DataTable (упор мой)

Я не думаю, что вы сможете получить DataTable для принудительного применения этого для вас, вам придется применять поведение вручную.

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