MVC 4 내에서 Entity Framework의 기본 종속성을 제거하는 방법이 있습니까?

asp.net-mvc-4 dapper entity-framework

문제

ASP.NET MVC 4 프로젝트 내에서 Entity Framework의 기본 종속성을 제거하고 Dapper 와 같은 다른 유사한 기술로 대체하는 방법이 있습니까?

수락 된 답변

새 ASP.NET MVC 4 웹 응용 프로그램을 만들고 "인터넷 응용 프로그램"을 프로젝트 템플릿으로 선택하면 Entity Framework가 SimpleMembership의 일부로 참조되고 사용된다는 것을 알게됩니다. 그러나 Entity Framework에 대한 종속성은 매우 작으며 제거하기 만하면 안됩니다.

Entity Framework는 단지 2 개의 작은 작업에 사용되는 것으로 보입니다.

Entity Framework를 사용하는 첫 번째 방법은 멤버십 데이터를 저장하는 데 필요한 데이터베이스 스키마를 만드는 것입니다. 데이터베이스 스키마 생성은 Dapper가 당신을 위해 할 일이 아니며, Entity Framework를 제거하면 멤버 모델 / 데이터베이스의 변경 사항을 수동으로 관리해야합니다.

Entity Framework가 사용되는 두 번째 방법은 OAuth 통합의 일부로 기본 "AccountController"내의 "ExternalLoginConfirmation"이라는 단일 메서드 내에 있습니다. 외부 공급자 (Facebook 등)로부터 인증 된 신규 사용자를 등록하는 데 사용됩니다.

우리는 SimpleMembership이 Entity Framework가 아닌 SQL 명령을 사용한다고 말할 수 있습니다 [1].

SimpleMembership은 Entity Framework가 아닌 SQL 명령을 사용하기 때문에이 작업을 수행하는 Dapper 솔루션만큼 빠릅니다. 또한 SimpleMembership의이 구성은 Microsoft와 커뮤니티에서 광범위하게 테스트되었습니다. 그런 이유로 나는 그것을 내버려 둘 것이다. 보안을 다루는 코드는 공인 된 보안 전문가에게 맡겨야합니다.

Entity Framework를 새 ASP.NET MVC 4 웹 응용 프로그램에서 제거하는 방법

정말로 원하면 종속성을 제거하기가 매우 쉽습니다 (회원 데이터베이스가 이미 생성되어 작동 중이라고 가정합니다).

=====> 1 단계

Visual Studio 솔루션 탐색기에서 "참조"폴더를 엽니 다.

"EntityFramework"를 마우스 오른쪽 버튼으로 클릭하고 "제거"를 선택하십시오.

=====> 2 단계

필터 열기 / InitializeSimpleMembershipAttribute.cs

다음을 삭제하십시오.

using System.Data.Entity.Infrastructure;

Database.SetInitializer<UsersContext>( null );

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

=====> 3 단계

열기 : 모델 / AccountModels.cs

다음을 삭제하십시오.

public class UsersContext : DbContext {
    public UsersContext()
        : base( "DefaultConnection" ) {
    }

    public DbSet<UserProfile> UserProfiles {
        get;
        set;
    }
}

=====> 4 단계

열기 : 컨트롤러 / AccountController.cs

"ExternalLoginConfirmation"이라는 메서드를 찾습니다.

다음을 교체하십시오.

using ( UsersContext db = new UsersContext() ) {
    UserProfile user = db.UserProfiles.FirstOrDefault( u => u.UserName.ToLower() == model.UserName.ToLower() );
    // Check if user already exists
    if ( user == null ) {
        // Insert name into the profile table
        db.UserProfiles.Add( new UserProfile {
            UserName = model.UserName
        } );
        db.SaveChanges();

당신의 더 똑같은 코드 - 코드 주석은 구현해야 할 것을 알려줍니다.

OAuth를 사용하지 않는 경우이 방법과 다른 방법을 모두 제거 할 수 있어야합니다.

Et Voila;)

[1] "모든 것이 저장 프로 시저, 뷰, 에이전트 및 변경 알림을 요구하기보다는 SQL 호출로 구현됩니다."
Jon Galloway, Microsoft

[2] "나 자신의 암호화 알고리즘과 보안 시스템을 사용하는 것에 대한 모든 표준주의 사항을 알려 드리겠습니다 : 그렇지 않습니다. 거의 안전하지는 않은 보안 시스템을 만드는 것은 매우 쉽습니다. 거짓된 보안 감각은 전혀 보안 체계가없는 것보다 더 나쁩니다! "
에릭 리 퍼트, 전설



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.