2014-01-30 2 views
1

Я пытаюсь установить правильную строку подключения для моей базы данных, чтобы мой метод WebSecurity.InitializeDatabaseConnection мог указать на мою базу данных.Установить правильную строку подключения для SimpleMembership

Вот моя строка соединения:

<add name="Database_Entities1" connectionString="metadata=res://*/Models.DAL.Entities.MTG_Model.csdl|res://*/Models.DAL.Entities.MTG_Model.ssdl|res://*/Models.DAL.Entities.MTG_Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=**.**.***.***;initial catalog=Model_Name;persist security info=True;user id=*****;password=*********;multipleactiveresultsets=True;application name=EntityFramework;Pooling=True;Max Pool Size=1000&quot;" providerName="System.Data.EntityClient" /> 

Проблема здесь имя провайдера, который System.Data.EntityClient. Мне действительно нужно, чтобы он указывал на System.Data.SqlClient, но когда я пытаюсь скопировать/вставить строку подключения и заменить System.Data.EntityClient на другое имя провайдера, я получаю такой сбой, как Keyword not supported: 'metadata'..

Так я понимаю, что вызов мой метод, как это:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
{ 
    private static SimpleMembershipInitializer _initializer; 
    private static object _initializerLock = new object(); 
    private static bool _isInitialized; 

    public override void OnActionExecuting(ActionExecutingContext _filterContext) 
    { 
     // Ensure ASP.NET Simple Membership is initialized only once per app start 
     LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
    } 

    private class SimpleMembershipInitializer 
    { 
     public SimpleMembershipInitializer() 
     { 
      Database.SetInitializer<Database_Entities1>(null); 

      try 
      { 
       using (var context = new Database_Entities1()) 
       { 
        if (!context.Database.Exists()) 
        { 
         // Create the SimpleMembership database without Entity Framework migration schema 
         ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); 
        } 
       } 

       WebSecurity.InitializeDatabaseConnection("Database_Entities2", "UserProfile", "UserId", "UserName", true); 
      } 
      catch (Exception ex) 
      { 
       throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
      } 
     } 
    } 
} 

Где Database_Entities2 является:

<add name="Database_Entities2" connectionString="metadata=res://*/Models.DAL.Entities.MTG_Model.csdl|res://*/Models.DAL.Entities.MTG_Model.ssdl|res://*/Models.DAL.Entities.MTG_Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=**.**.***.***;initial catalog=Model_Name;persist security info=True;user id=*****;password=*********;multipleactiveresultsets=True;application name=EntityFramework;Pooling=True;Max Pool Size=1000&quot;" providerName="System.Data.SqlClient" /> 

не работает, потому что строка соединения SqlClient не работает таким образом. Может ли кто-нибудь помочь мне достичь того, что я пытаюсь сделать? Большое спасибо!

EDIT

Два additionnal часть информации: У меня есть эта строка соединения:

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MyApp-20130829080410;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MyApp-20130829080410.mdf" providerName="System.Data.SqlClient" /> 

Который работал; однако, как вы можете видеть, он не указывает на мою базу данных, поэтому, если я попытаюсь найти всех пользователей в таблице «UserProfile», это невозможно, поскольку таблица была создана в локальной базе данных (что я не знаю почему у меня есть), а не в главном (Database_Entities1), следовательно, этот вопрос.

ответ

3

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

<add name="MembershipDB" 
    connectionString="Data Source=**.**.***.***;Initial Catalog=Model_Name;[...]" 
    providerName="System.Data.SqlClient" /> 
+0

YEAH! Это сработало! Я опубликую свой результат там, но, наконец, он работает правильно, спасибо большое! – hsim

+0

@HerveS Это одно из моих раздражителей с инфраструктурой сущностей (сначала база данных). Мне бы очень хотелось узнать, кто в Microsoft подумал, что было бы неплохо встроить строку соединения внутри строки подключения (что по сути является строкой соединения с инфраструктурой сущности). –

+0

Проблема, с которой я сейчас сталкиваюсь, состоит в том, что у меня есть 2 соединения, один для моей диаграммы и один для простых атрибутов членства. Как я могу получить доступ к пользовательскому профилю в модели «Database_Entity1»? – hsim

-1

Если вы используете Entity Framework, строка соединения будет создана IDE. И из вашего описания, я думаю, вы создали эту строку соединения самостоятельно, а не через IDE.

Так что IDE будет поместить что-то подобное в вашем app.config:

<add name="libraryEntities1" connectionString="metadata=res://*/privlibDBmodel.csdl|res://*/privlibDBmodel.ssdl|res://*/privlibDBmodel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=[yourserver];initial catalog=library;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Для создания соединения в вашей программе вы можете использовать это:

libraryEntities1 dbconn = new libraryEnitits1(); 

Теперь вы можете обрабатывать соединения через объект dbcon.

+0

Ну, вы правы, и это работает, если я пытаюсь загрузить все данные из моей базы данных в обычном режиме. Однако строка соединения, необходимая для «SimpleMembership», не такая же, как и для обычной работы базы данных. – hsim

Смежные вопросы