2014-01-30 1 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'.과 같은 충돌이 발생합니다.

그래서 나의 이해는이처럼 내 방법을 호출하는 것입니다 :하는 SqlClient 연결 문자열이 그런 식으로 작동하지 않기 때문에
<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" /> 

가 작동하지 않습니다 : Database_Entities2

[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); 
      } 
     } 
    } 
} 

. 누구든지 제가하려는 일을 성취하도록 도울 수 있습니까? 고마워요!

편집

두 정보의 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

예. 그것은 효과가있다! 나는 거기에 내 결과를 게시 할 것입니다,하지만 마침내 제대로 작동하는 것 같습니다, 많이 감사합니다! – hsim

+0

@HerveS 엔티티 프레임 워크 (데이터베이스 첫 번째)에 대한 내 애도 중 하나입니다. Microsoft에서 연결 문자열 (기본적으로 엔터티 프레임 워크 연결 문자열이 무엇인지) 내에 연결 문자열을 포함시키는 것이 좋은지 누가 알았는지 정말 알고 싶습니다. –

+0

지금 당장 가지고있는 문제는 다이어그램과 간단한 멤버십 속성에 대해 하나씩 2 개의 연결이 있다는 것입니다. 'Database_Entity1' 모델에서 UserProfile에 어떻게 접근 할 수 있습니까? – hsim

-1

Entity Framework을 사용하면 연결 문자열이 IDE에서 만들어집니다. 그리고 귀하의 설명에서 나는 당신이 IDE를 통해서가 아니라 당신 자신의 연결 문자열을 생성했다고 생각합니다.

그래서 IDE는 당신의 app.config에서 같은 것을 배치 할 :

libraryEntities1 dbconn = new libraryEnitits1(); 

지금 당신이 연결을 처리 할 수있는 :

<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" /> 

은 당신이 사용할 수있는 프로그램의 연결을 만들려면 dbcon 객체를 통해.

+0

정상적으로 데이터베이스에있는 데이터를로드하려고하면 정상적으로 작동합니다. 그러나 'SimpleMembership'에 필요한 연결 문자열은 일반 데이터베이스 작업에 필요한 연결 문자열과 동일하지 않습니다. – hsim

관련 문제