2014-10-06 2 views
10

this 질문과 동일한 문제가 발생하지만 거기에 제시된 시나리오는 적용되지 않는 것으로 보이므로 다른 문제가 있다고 생각합니다. 사실, 나는 서로 다른 원인과 해결책을 가진 유사한 몇 가지 질문을보고 있습니다. 그래서이 오류는 높은 수준에서 발생해야한다고 생각합니다. 그건 ...엔티티 유형 IdentityUser는 현재 컨텍스트 모델의 일부가 아닙니다.

저는 EF 코드 우선 데이터베이스 모델을 가지고 있으며, MVC 5 사이트의 표준 등록을 연장하기 위해 IdentityUser을 사용하려고합니다.

내가 가진 내 확장 UserModel :

namespace MyMvcSite.Models { 
    public class UserModel :IdentityUser { 
     public string BillingId { get; set; } 
     public virtual ICollection<DatabaseModel> Databases { get; set; } 
} 

그리고 내 상황 :

public async Task<IdentityResult> RegisterUser(UserModel user) { 
    user.Email = user.UserName; 
    var result = await _userManager.CreateAsync(user); 

    return result; 
} 

내가 얻을 : 이제

using MyMvcSite.Models; 
namespace MyMvcSite.Web { 
    public class AuthContext : IdentityDbContext<UserModel> { 
     public AuthContext() : base("AuthContext") { 

     } 
    } 
} 

, 나는 사용자를 등록하는 코드를 실행할 때 오류 : The entity type IdentityUser is not part of the model for the current context. 내가보기에이 오류가 의미하는 바를 알 수 없습니다. 나는 모든 것이 정확하다. 아무도 잘못 될 수 있다고 말할 수 있습니까 ???

이전에 사용했기 때문에 연결 문자열 AuthContext이 정확한지 확인합니다.

+0

은 어떻게 당신의'_userManager'와는'context'의 인스턴스를합니까? 이것은 도움이 될 것 같습니다 : http://stackoverflow.com/questions/23893710/the-entity-type-applicationuser-is-not-part-of-the-model-for-the-current-context –

+0

내'_userManager '는 다음과 같이 초기화되었습니다 :'_userManager = new UserManager (새로운 UserStore (_ ctx));'. 나는 그것을 '_userManager = new UserManager (새로운 사용자 저장소 (_ctx));로 변경하여 해결했습니다! 답변을 올리면 받아 들일 것입니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! – Brett

답변

13

ASP.NET ID가있는 사용자 지정 사용자 클래스를 사용하는 경우 인스턴스화시 UserManagerUserStore에 모두 사용자 지정 사용자 클래스 형식 <T>을 명시 적으로 지정해야합니다.

private UserManager<UserModel> _userManager; 

public AccountController() 
{ 
    AuthContext _ctx = new AuthContext(); 

    UserStore<UserModel> userStore = new UserStore<UserModel>(_ctx); 
    _userManager = new UserManager<UserModel>(userStore);  
} 

또는 짧은 형태 (회신 코멘트 등)

:

private UserManager<UserModel> _userManager; 

public AccountController() 
{ 
    AuthContext _ctx = new AuthContext();  
    _userManager = new UserManager<UserModel>(new UserStore<UserModel>(_ctx));  
} 

유형이 당신은 당신이보고 된 오류를 경험하게 될 것입니다 사용자 정의 클래스를 사용하고자 할 때 IdentityUser이 기본값이 허용됩니다.

+0

이것은 그랬다! 감사! – Brett

+0

고마워, @ 브렛 –

+0

+100 효과가있었습니다! –

5

내 프로젝트에 DI를 도입했을 때이 오류가 발생했습니다. AutoFac 내 UserStore 인스턴스를 생성 할 때, 그것은 새로운 IdentityDbContext, 나의 ApplicationDbContext 생성 기본 UserStore()의 ctor를 사용했다 builder.RegisterType<ApplicationDbContext>().As<DbContext>().InstancePerLifetimeScope();이없이

: AutoFac 및 ID를 사용하여 나는 다음과 같은 추가했다.

이 줄을 사용하면 ctor가 호출되고 ApplicationDbContext이 표시됩니다.

7

나는이 같은 문제를 겪고 있었고, MVC4의 SimpleMembership에서 비슷한 문제를 경험했다.

데이터베이스를 처음 개발하고 있으므로 EDMX 파일이 있습니다. ASP.NET Identity는 .edmx 모델 파일을 생성 할 때 생성 된 연결 문자열을 좋아하지 않습니다. a. EDM 연결 문자열 in : base ("EDMConnString")이 문제가 발생할 가능성이 큽니다.

ASP.NET ID 테이블이 (내 경우 동일한 데이터베이스) 데이터베이스를 가리키는 표준 연결 문자열을 만들어이 연결 문자열을 base로 사용하여이 문제를 해결했습니다.이 같은

뭔가

<add name="IdentityConnection" connectionString="data source=THEJUS\SQLSERVER2014;initial catalog=IdentitySample;integrated security=True;MultipleActiveResultSets=True;App=IdentitySample.Admin" providerName="System.Data.SqlClient" /> 
+3

예. 그게 내 문제를 해결해 줬어. 2 개의 연결 문자열이 필요합니다. 하나는 신원 정보 용이고 다른 하나는 EF 용입니다. Web.Config를 보면 기본 연결이 표시되고 설치하는 동안 하나의 EF가 구성됩니다. 더미 MVC5를 쉽게 구축하고 EF를 추가하여 데이터베이스를 볼 수 있으며 데이터베이스가 동일 할 때 사용할 수 있습니다. 내 문제는 나중에 EF를 추가 한 MVC 5 앱으로 인해 발생했습니다 (데이터 우선). 그런 다음 필요없는 "DefaultConnection"을 삭제했습니다. 따라서 Identity는 base에서 참조 된 연결을 사용합니다. EF는 컨트롤러의 맨 위에 설정 한 엔티티 모델을 사용합니다. – JustJohn

+0

MyModelEntities _db = new MyModelEntities(); – JustJohn

+1

감사합니다. @JustJohn, 이것은 결국 나를 위해 일한 것입니다! – GabeMeister

관련 문제