Использование MVC 4 SimpleMembership с существующей базой данных EF-модели

Я пытаюсь использовать SimpleMembership в своем MVC 4 в первый раз, и у меня уже есть существующая база данных и модель EF5, созданная на ее основе! Я много искал, но я не могу найти, как я мог бы использовать его в своем случае, а также иметь все под своей собственной моделью.

Было бы здорово, если кто-нибудь может дать мне представление, как это сделать.

Спасибо

Ответы

Ответ 1

Чисто как точка ссылки, может быть хорошей идеей создать новый шаблон интернет-приложения для проекта ASP.NET MVC 4 Web Application (т.е. через File > New Project).

Если вы посмотрите на AccountController, как говорит @zms6445, он украшен атрибутом InitializeSimpleMembership. Вы можете найти реализацию этого атрибута в файле InitializeSimpleMembershipAttribute.cs в папке "Фильтры" в корневом каталоге.

Здесь, это недостающая часть головоломки - вам нужно подключить существующую базу данных, чтобы она использовалась SimpleMembershipProvider. Это код, который вам нужен:

private class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        try
        {
            if (!WebSecurity.Initialized)
            {
                WebSecurity.InitializeDatabaseConnection("CONNECTION_STRING_NAME", "USER_TABLE", "USER_ID_FIELD", "USER_NAME_FIELD", autoCreateTables: true);
            }
        }
        catch (Exception ex)
        {
            throw new InvalidOperationException("Something is wrong", ex);
        }
    }
}

Некоторые примечания:

  • CONNECTION_STRING_NAME - это запись в вашем web.config ConnectionStrings - вы НЕ МОЖЕТЕ использовать строку подключения модели здесь - SimpleMembershipProvider не распознает этот формат! Вам нужно указать строку подключения System.Data.SqlClient, например.

    < add name= "CONNECTION_STRING_NAME" connectionString = "источник данных = SERVER; начальный каталог = DATABASE; идентификатор пользователя = USER; пароль = PASSWORD;" providerName = "System.Data.SqlClient" / >

  • USER_TABLE - это таблица в вашей базе данных для хранения дополнительной информации пользователя, такой как имя, фамилия и т.д. Это связано с автогенерированными таблицами через USER_ID_FIELD.

  • USER_ID_FIELD обычно является основным ключом вашей таблицы Users. Он должен иметь тип int.

  • USER_ID_NAME - это уникальное имя для пользователя, которое может быть адресом электронной почты.

  • autoCreateTables устанавливается в true, чтобы гарантировать, что таблицы, необходимые для работы SimpleMembership, создаются, если они еще не существуют.

Конечно, этот код запускается только в том случае, если вы нажимаете страницу через AccountController, так как это было украшено атрибутом. Вы можете поставить там точку останова и увидеть ее в действии.

Это должно заставить вас начать - шаблон интернет-приложения - довольно хороший шаблон для отслеживания, если вы застряли.

Надеюсь, что это поможет.

Ответ 2

В вашем web.config в теге appSettings добавьте строку

<add key="enableSimpleMembership" value="true"/>

SimpleMembership встроен, поэтому отсюда вам просто нужно написать

[InitializeSimpleMembership]

над вашим открытым классом AccountController: Controller

Если вы хотите заставить пользователя войти в систему для определенной страницы, вы пишете в контроллере страниц

[Authorize]

Эти таблицы будут автоматически сгенерированы в вашей базе данных. Если вы хотите добавить дополнительные поля в эти таблицы, вам нужно просто его загрузить.

Здесь ссылка для дополнительной информации http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx