Я пишу программу на 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, надеющихся получить ответ здесь.