1

데이터베이스 기반 ASP.NET MVC 4 프로젝트가 있고 데이터베이스의 사용자 정의 user_info 테이블과 함께 SimpleMembershipProvider를 사용하고 싶습니다. SQL Server에서 Entitiy Framework 6을 사용하고 있습니다. 나는 해결책을 찾기 위해 인터넷과 SO를 샅샅이 조사했지만 운이 없었다.데이터베이스 우선 ASP.NET MVC4 프로젝트에서 내 데이터베이스로 SimpleMembershipProvider 사용

내 user_info 테이블은 다음과 같다 : 나는 How can I customize simple membership provider to work with my own database ASP.NET mvc 4의 단계를 수행하는 것을 시도했다, 그러나 나는이 방법은 비 코드 - 먼저 프로젝트를 위해 작동합니다 생각하지 않습니다

[Id]   INT   IDENTITY (1, 1) NOT NULL, 
[email]   NVARCHAR (MAX) NULL, 
[first_name] NVARCHAR (MAX) NULL, 
[last_name]  NVARCHAR (MAX) NULL, 
[internal_role] INT   NULL, 
CONSTRAINT [PK_user_info] PRIMARY KEY CLUSTERED ([Id] ASC) 

. "요청한 .Net Framework 데이터 공급자를 찾을 수 없습니다. 설치되지 않았을 수 있습니다."라는 오류 메시지가 나타납니다. SimpleMembershipInitializer() 함수에 다음 코드를 추가하려고 할 때. 여기

WebSecurity.InitializeDatabaseConnection("ReservationSystemEntities", "user_info", "Id", "email", autoCreateTables: true); 

내 Web.config 파일에서 관련 정보입니다 :

<configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx" requirePermission="false" /> 
</configSections> 

<connectionStrings> 
<add name="ReservationSystemEntities" connectionString="metadata=res://*/ReservationSystem.csdl|res://*/ReservationSystem.ssdl|res://*/ReservationSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0;initial catalog=ReservationSystem;integrated security=True;user id=xxxxx;password=xxxxx;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <providers> 
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
</entityFramework> 

I 해요 문제는이 답변에 따라, 가능한 경우도 확실하지 : SimpleMembershipInitializer won't initialize

이를 바탕으로 대답 Using MVC 4 SimpleMembership with an existing database-first EF model 다음과 같은 연결 문자열을 지정해야합니다.

<add name="CONNECTION_STRING_NAME" connectionString="data source=SERVER;initial catalog=DATABASE;user id=USER;password=PASSWORD;" providerName="System.Data.SqlClient" /> 

내 연결 문자열을 이처럼 연결 문자열로 변환하는 방법을 모르겠다. 이 유형의 연결 문자열은 Code-First를 사용할 때만 유효합니까?

도움을 주시면 감사하겠습니다.

+0

EF6를 사용하는 것을 알 수 있습니다. 어떤 데이터베이스 서버 유형을 사용하고 있습니까? 또한 webconfig에서 EntityFramework 및 System.Data 섹션을 게시하십시오. "비밀번호/사용자 이름 제외" 직접적인 오류는 web.config에서 EF6이 올바르게 구성되어 있지 않다는 것입니다. 아니면 EF6의 누 겟 패키지가 누락되었습니다. MySql을 사용하는 경우 제대로 실행하려면 많은 어려움이 있습니다. –

+0

@Ryios 도움을 주셔서 대단히 감사합니다.요청한 정보로 질문을 업데이트했습니다. 내 웹 사이트는 SimpleMembership을 내 데이터베이스와 함께 사용하기 전에 EF6를 사용하여 올바르게 작동했습니다. WebSecurity.InitializeDatabaseConnection (...) 부분을 InitializeSimpleMembershipAttribute에 추가하기 시작할 때까지 아무 문제없이 EF6을 사용하여 user_info 테이블이 들어있는 데이터베이스에 액세스 할 수있었습니다. – oalbrecht

+0

자체 데이터베이스에서 SimpleMembership 정보로 프로젝트를 시작했습니다. 이 데이터베이스 외에도 EF6을 사용하여 액세스하는 모든 테이블을 가진 테이블이 있습니다. 이제 SimpleMembership 테이블이 포함 된 데이터베이스에 DefaultConnection을 사용하지 않고 대신 다른 데이터베이스 인 SimpleMembership을 사용하려고합니다. – oalbrecht

답변

1

나는 결국 대답을 찾았습니다! 원래 질문/답변은 Using SimpleMembership with EF model-first을 참조하십시오.

SimpleMembership은 먼저 모델/데이터베이스에서 작동 할 수 있습니다.

1. InitializeSimpleMembershipAttribute.cs MVC에서 4 인터넷 응용 프로그램 templete입니다이 AcountModel.cs

3.Fix AccountCotroler.cs에서이

namespace WebAndAPILayer.Filters 
{ 
    [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() 
      { 
       try 
       { 
        WebSecurity.InitializeDatabaseConnection("ConnStringForWebSecurity", "UserProfile", "Id", "UserName", autoCreateTables: true); 
       } 
       catch (Exception ex) 
       { 
        throw new InvalidOperationException("Something is wrong", ex); 
       } 
      } 
     } 
    } 
} 

2.Delete CodeFirst 클래스처럼 보일 것입니다 귀하의 모델 - 함께 작동하도록 : 여기에 솔루션입니다 첫 번째 DbContext (ExternalLoginConfirmation(RegisterExternalLoginModel model, string returnUrl) 메서드)

4. "ConnStringForWebSecurity" 연결 문자열을 정의하십시오.이 연결 문자열은 model- 첫째 DB 접근은, 우리가 제공 System.Data.SqlClient하지 SQL 서버, 컴팩트 SQL 서버, SQL Server Express를, 또는 MySQL의에 대해 실행할 수 System.Data.EntityClient

<connectionStrings> 
     <add name="ModelFirstEntityFramework" connectionString="metadata=res://*/Context.csdl|res://*/Context.ssdl|res://*/Context.msl;provider=System.Data.SqlClient;provider 
connection string=&quot;data source=.\SQLEXPRESS;Initial 
Catalog=aspnet-MVC4;Integrated 
Security=SSPI;multipleactiveresultsets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" /> 
     <add name="ConnStringForWebSecurity" connectionString="data source=.\SQLEXPRESS;Initial Catalog=aspnet-MVC4;Integrated 
Security=SSPI" providerName="System.Data.SqlClient" /> 
     </connectionStrings> 
+0

감사합니다. 간단하고 좋은 아이디어였습니다. –