2014-02-21 8 views
0

Я пытаюсь создать Custom Simple Membership Provider в ASP.NET MVC 4. В InitializeSimpleMembershipAttribute класс, у меня есть эта строка кода:Как создать пользовательский простой поставщика членства, когда таблица Пользователь не имеет ID

WebSecurity.InitializeDatabaseConnection("ConnStringForWebSecurity", "User", "", "Username", autoCreateTables: false); 

Как вы можете видеть здесь, я пытаюсь использовать таблицу User в моей базе данных. Для функции InitializeDatabaseConnection:

  • Первый параметр - это имя строки подключения.
  • Второе название таблицы.
  • Третий столбец идентификатора пользователя.
  • Четвертый столбец имени пользователя.

Эта функция ожидает, что у нас есть столбец id для таблицы User. Но в моем случае. Я использую столбец Username в качестве первичного ключа, поэтому у меня нет колонки id.

Мой вопрос, если у меня нет id столбец, что я должен передать третьему параметру? Передача пустой или пустой строки недопустима, и будет выбрано исключение. Что мне делать?

Большое спасибо за помощь.

+0

это может помочь http://stackoverflow.com/questions/16704065/how-do-i-use-my-own-database-with-simplemembership-and-websecurity-what-is-mvc4 – Miller

ответ

0

Короткий ответ -

Вы должны иметь идентификатор столбца (имя его, как вам нравится) типа междунар в таблице профилей пользователей. SimpleMembershipProvider (SMP) задает два идентификатора нулевого столбца один и второе имя пользователя в таблице UserProfile. Это когда вы выбираете из SimpleMembershipProvider, что в вашем случае я сомневаюсь, что вам действительно нужно. Если у вас есть какие-либо пользовательские потребности (которые SimpleMembershipProvider останавливает вас), вы можете получить от MembershipProvider.

Исключение выбрано потому, что SimpleMembershipProvider использует внутренний столбец UserId и считается не нулевым.

Чуть более подробно -

Теперь немного более подробно, чтобы помочь вам понять, почему так -

SimpleMembershipProvider был разработан, чтобы быть гибким, однако его ключевой задачей является обеспечение более простой способ проверки пользователя , Его целью является нацеленность на те 80% веб-приложений, которые имеют общие требования к аутентификации.

Если вы хотите настроить, например, вы хотите добавить пользовательский столбец (адрес электронной почты) в свою таблицу UserProfile (это также имя таблицы), вы можете сделать это. SimpleMembershipProvider просто ожидает, что у вас будет создана база данных, она может создать таблицу для вас, но таблица должна иметь два обязательных столбца (UserID и UserName).

Для получения дополнительной информации см. Ссылку, опубликованную в комментарии @miller.

Если у вас есть какой-либо последующий вопрос, пожалуйста, поделитесь с более подробной информацией о том, чего вы пытаетесь достичь, создав настраиваемого поставщика.

Edit (ответ на последующие вопросы)

именем столбца может быть что угодно (EmployeeID будет работать, а), то он будет создан как не нулевой Int типа в таблице базы данных. Ваше приложение будет работать до тех пор, пока вы не вызываете метод, который использует UserId. Интересно, как вы создаете нового пользователя. С новым веб-приложением MVC 4, когда вы регистрируете нового пользователя, WebSecurity переадресуйте вызов на SimpleMembershipProvider, чтобы создать нового пользователя. SimpleMembershipProvider Метод CreateUserRow() проверяет, существует ли идентификатор пользователя. Если уже существует, то выдают исключение. После создания пользователя SimpleMembershipProvider использует UserId для нескольких общедоступных методов, например. GetUserNameFromId(), GetUser(), DeleteUser(), CreateAccount() и т. Д.

То, как членство использует таблицу UserProfile, я боюсь, что вам придется предоставить столбец UserId. Вы также можете получить пользователя с помощью UserName и вообще не будете использовать UserId.

Если вы используете SimpleMembershipProvider, рассмотрите два столбца таблицы UserProfile, зарезервированные для внутреннего использования. Любая пользовательская логика приложения может быть построена путем добавления большего количества столбцов.

+0

Спасибо за ваш ответ , У меня все еще есть один вопрос. Когда я передаю 'Username' в столбец' UserId', проект работает хорошо. Это нормально? Имеет ли он какой-либо более поздний плохой эффект? Для чего «SimpleMembershipProvider» использует «UserId»? Если он использует его только как первичный ключ, значит 'Username' в порядке. – AnhTriet

+0

@ Forte_201092 - Я отредактировал свой ответ, посмотрим, поможет ли он. – SBirthare

+0

Получил, спасибо много :) – AnhTriet