SimpleMembershipInitializer не будет инициализироваться

Я борюсь за то, чтобы сценарий простого членства работал в моем проекте EntityFramework / MVC4 / DatabaseFirst. Я'Мы нашли множество примеров для работы с кодом в первую очередь, но ничего для БД.

Проблема яя обнаружил, что InitializeDatabaseConnection выдает ошибку ("Не удалось найти запрошенный поставщик данных .Net Framework. Это не может быть установлено ".) Код выглядит так:

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true);

Я не уверен, что DataProvider не работает. Если я попытаюсь отследитьв' вызов InitializeDatabaseConnection, он сразу выбрасывает ошибку.

Что мне не хватает?

Информация:

DALEntities - это имя строки соединения, которую использует остальная часть EF. Следующий код работает просто отлично ....

    public ActionResult Test() {
        using (var db = new DALEntities()) {
            var query = from i in db.TBLINVENTORies
                            orderby i.ITEMNAME
                            select i;
            var cnt = query.Count();
            string str = "Total Inventory: " + cnt;
            return Content(str);
        }
    }

Мой раздел строк подключения из web.config:

  
    
  

Этот пост, кажется, задает тот же вопрос (но в контексте модели сначала), но решения пока нет:Использование SimpleMembership с EF Model-first

Кроме того, я вижу, что есть перегрузка дляWebSecurity.InitializeDatabaseConnection() с помощью текста:Initializes the membership system ((blah blah ProviderName: the name of the ADO.NET data provider. If you want to use Microsoft SQL Server, the WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection(String, String, String, String, Boolean) overload is recommended , яделать Хотите подключиться к серверу MSSQL ... это будет необходимо?

 reidLinden15 окт. 2012 г., 22:08
Стоит попробовать ... но определенно ощущается как краткосрочный обходной путь ...
 Eonasdan15 окт. 2012 г., 22:42
У меня было множество проблем с "просто" членство, наверноепросто мне. Мне пришлось реализовать несколько методов самостоятельно, потому что я использовал SQL вместо SQL Compact. Мои таблицы членства уже находятся в той же базе данных, поэтому я просто добавил таблицы в свою модель EF.
 StuartLC08 нояб. 2012 г., 08:19
Марио»Ответ sВот предоставляет способ использовать базу данных / модель EF сначала с простым членством, хотя и с некоторыми операциями.
 reidLinden15 окт. 2012 г., 22:18
да, это сработало, чтобы обойти ошибку, но я неНе думаю, что это хорошая идея - подключиться к моей базе данных EF без преимуществ EF ....?
 Eonasdan15 окт. 2012 г., 22:03
мои проекты не делалиМне нравится использовать строку подключения EF. вместо этого мне пришлось добавить вторую строку подключения, которая была строкой подключения SQL (или sql compact). Я не'не стоит много думать об этом, так что у кого-то может быть идея получше

Ответы на вопрос(2)

указывающие на одну и ту же базу данных. Один для EF (нене имеет значения, если сначала код или данные) и один для ваших вещей WebSecurity. (Как сказали Чад и Эрик)

<add name="DataEntities" connectionstring="metadata=res://*/Models.DataEntities.csdl|res://*/Models.DataEntities.ssdl|res://*/Models.DataEntities.msl;provider=System.Data.SqlClient;provider connection string='data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]'" providername="System.Data.EntityClient">
<add name="DataDB" connectionstring="data source=[YOUR_SERVER];initial catalog=[YOUR_DATABASE];integrated security=True;MultipleActiveResultSets=True;App=[YOUR_APP_NAME]" providername="System.Data.SqlClient">
</add></add>

Обратите внимание, что поставщики различны: EF использует System.data.EntityClient, а не-EF использует System.Data.SqlClient.

Решение Вопроса

доставляющий вам проблемы, - это тот, который указан в строке подключения, и называется System.Data.EntityClient. Я подозреваю, что проблема в том, что ваш проект - сначала база данных, тогда как простое членство использует код сначала. Я не думаю, что вы можете смешать эти подходы в одной базе данных. Попробуйте вернуть его туда, где DefaultConnection используется для IntializeDatabaseConnection. В вашем файле web.config должен быть элемент DefaultConnection, созданный скаффолдингом MVC4. Эта строка подключения обычно использует System.Data.SqlClient в качестве поставщика.

Если вы хотите сохранить простое членство в базе данных, используемой для хранения информации о домене (т. Е. DALEntities), вам нужно будет изменить свой метод использования EF в домене на код в первую очередь. Если вы хотите сохранить базу данных своего проекта, сначала вам нужно разработать собственную схему членства в базе данных иразработка пользовательских членов и поставщиков ролей, Это, вероятно, лучший подход, если вы действительно пытаетесь интегрировать пользовательскую информацию в модель вашего домена.

 Erik Funkenbusch13 мая 2013 г., 17:23
@KevinJunghans - я неЯ не верю, что это правда. Вы должны иметь возможность просто иметь две строки подключения к одной и той же базе данных, одна (используемая в WebSecurity) использует SqlClient, другая использует EntityClient.
 Chad Richardson02 окт. 2013 г., 04:09
@MystereMan Да, это действительно работает, если у вас есть 2 строки подключения, как вы упомянули.
 Kevin Junghans16 окт. 2012 г., 14:59
@reidLinden - я обновил свой ответ на основе ваших комментариев.
 reidLinden15 окт. 2012 г., 22:23
Я согласен с вами по поводуSystem.Data.EntityClient, но мне нужно работать против моей обычной базы данных для управления пользователями. Для меня нереально иметь отдельные базы данных.
 reidLinden16 окт. 2012 г., 18:20
Спасибо. Я понимаю что тыповторяю, и я думаю, что он полностью отвечает на мой вопрос.

Ваш ответ на вопрос