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

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

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

Спасибо




Ответы (2)


Исключительно в качестве ориентира может быть хорошей идеей создать новый шаблон интернет-приложения проекта веб-приложения ASP.NET MVC 4 (т. е. через Файл > Новый проект).

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

Здесь недостающая часть головоломки — вам нужно подключить существующую базу данных, чтобы она использовалась 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);
        }
    }
}

Некоторые вещи, которые следует отметить:

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

    ‹add name="CONNECTION_STRING_NAME" connectionString="источник данных=СЕРВЕР;начальный каталог=БАЗА ДАННЫХ;идентификатор пользователя=ПОЛЬЗОВАТЕЛЬ;пароль=ПАРОЛЬ;" providerName="System.Data.SqlClient" /›

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

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

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

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

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

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

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

person Alistair Findlay    schedule 05.03.2013
comment
Я следовал вашим инструкциям, но получаю исключение TargetInvocationException от LazyInitializer. Любая идея об этом? - person Umut Koseali; 05.05.2013
comment
Я нашел это :) Брандмауэр SQL-сервера вызывает эту ошибку! Ненавижу брандмауэры :) - person Umut Koseali; 05.05.2013
comment
@UmutCanKöseali Думаю, у меня такая же проблема, как отключить брандмауэр sql? - person Cybercop; 30.05.2013
comment
@ Biplov13, как вам удалось заставить это работать должным образом? - person Rachael; 21.05.2014
comment
У меня есть база данных azure sql с ограниченным диапазоном IP-адресов, в основном, я не вхожу в этот диапазон. Я просто добавляю свой текущий IP. Оно работает - person Umut Koseali; 28.08.2014

В вашем 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

person zms6445    schedule 01.03.2013