Поставщик членства в ASP.NET: определение внешнего ключа для aspnet_Users.UserName - PullRequest
1 голос
/ 01 ноября 2011

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

aspnet_Users

  • идентификатор пользователя (PK) уникальный идентификатор
  • имя_пользователя nvarchar (256)

Сообщений

  • PostID (PK) int
  • Имя пользователя (FK -> aspnet_Users.UserName) nvarchar (256)

Однако, когда я пытаюсьчтобы настроить его с помощью конструктора VS 2010, выдается следующая ошибка:

The columns in table 'aspnet_Users' do not match an existing primary key
or unique constraint.

Не работает ли это, потому что aspnet_Users.UserName не является частью PK для aspnet_Users?Я пытался изменить таблицу, чтобы включить ее как часть PK (я думаю, что это делает его составным ключом?), Но он советует мне сначала удалить отношения, прежде чем я смогу это сделать.Поскольку я не знаю, какие отношения определяют таблицы членства по умолчанию, я бы предпочел узнать больше, прежде чем идти по этому пути.

Ответы [ 2 ]

3 голосов
/ 17 января 2012

Сообщение об ошибке полностью описывает ситуацию - вы пытаетесь использовать неключевое поле внутри ограничения внешнего ключа. Вы предлагаете попытаться создать составной ключ, чтобы обойти эту проблему, которая будет работать, но почему бы вам просто не использовать существующий первичный ключ?

Поле UserID является уникальным идентификатором PK, поэтому оно уже настроено для использования в FK. И вы будете использовать нормализацию, чтобы вместо сохранения (до) 256 байтов на имя пользователя в каждой строке вы сохраняли только уникальный идентификатор (16 байтов).

1 голос
/ 17 января 2012

Я думаю, вам нужно объединить его и с ApplicationID.Идентификатор пользователя не является уникальным, кроме как в сочетании с идентификатором приложения.

...