bestsource

엔터티 유형 ApplicationUser가 현재 컨텍스트의 모델에 속하지 않습니다.

bestsource 2023. 9. 16. 09:31
반응형

엔터티 유형 ApplicationUser가 현재 컨텍스트의 모델에 속하지 않습니다.

글을 따라 Identity 1.0.0에서 Identity 2.0.1로 마이그레이션합니다.

생성된 마이그레이션 코드는 새 IdentityUser에 관한 것이 아닙니다.새 열을 추가하지 않습니다.

그래서 새로운 프로젝트를 만들고 다시 시도했는데 마이그레이션 코드가 비어있습니다.

이 문제를 해결하기 위해 SQL Server에서 직접 편집을 수행하고 솔루션으로 데이터베이스를 다시 가져옵니다.

이제 나의AspNetUser내 것과 완전히 같습니다.IdentityUser당신이 볼 수 있듯이.

아이덴티티 사용자

public virtual int AccessFailedCount { get; set; }

public virtual ICollection<TClaim> Claims { get; }

public virtual string Email { get; set; }

public virtual bool EmailConfirmed { get; set; }

public virtual TKey Id { get; set; }

public virtual bool LockoutEnabled { get; set; }

public virtual DateTime? LockoutEndDateUtc { get; set; }

public virtual ICollection<TLogin> Logins { get; }

public virtual string PasswordHash { get; set; }

public virtual string PhoneNumber { get; set; }

public virtual bool PhoneNumberConfirmed { get; set; }

public virtual ICollection<TRole> Roles { get; }

public virtual string SecurityStamp { get; set; }

public virtual bool TwoFactorEnabled { get; set; }

public virtual string UserName { get; set; }

IdentityUser.cs

public class ApplicationUser : IdentityUser
{
    public bool Has_accepted_policy { get; set; }
    public int user_type_id { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {

    }
}

AspNet 사용자

public string Id { get; set; }

[Required]
[StringLength(256)]
public string UserName { get; set; }

public string PasswordHash { get; set; }

public string SecurityStamp { get; set; }

[StringLength(256)]
public string Email { get; set; }

public bool EmailConfirmed { get; set; }

public bool Is_Active { get; set; }

[Required]
[StringLength(128)]
public string Discriminator { get; set; }

public int? user_type_id { get; set; }

public bool Has_accepted_policy { get; set; }

public string PhoneNumber { get; set; }

public bool PhoneNumberConfirmed { get; set; }

public bool TwoFactorEnabled { get; set; }

public DateTime? LockoutEndDateUtc { get; set; }

public bool LockoutEnabled { get; set; }

public int AccessFailedCount { get; set; }

... other virtual properties 

사용자를 등록하려고 하면 다음과 같은 예외가 발생합니다.

엔터티 유형 ApplicationUser가 현재 컨텍스트의 모델에 속하지 않습니다.

이 선에서

IdentityResult result = await UserManager.CreateAsync(user, model.Password);

저의 스타트업.Auth.cs

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

그리고 내 계정 컨트롤러에서 나는 나의UserManager 식으로

public AccountController()
    : this(Startup.UserManagerFactory(), Startup.OAuthOptions.AccessTokenFormat)
{
}

public AccountController(UserManager<ApplicationUser> userManager,
    ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
{
    UserManager = userManager;
    AccessTokenFormat = accessTokenFormat;
}

public UserManager<ApplicationUser> UserManager { get; private set; }

나는 그 안에 있는 새로운 부동산 외에는 아무것도 바꾸지 않았습니다.AspNetUser이주 전에는 수업이 잘 진행되곤 했습니다.

코드플렉스에 수정된 것으로 표시된 유사한 문제가 있지만 해결책을 제시하지 않습니다.

이걸 어떻게 고치는지 아는 사람?

편집

SQL 데이터베이스를 편집할 때 실수가 없었는지 확인합니다.다른 프로젝트를 만들고 Identity 데이터베이스를 생성했는데 해당 데이터베이스에 대한 연결 문자열을 변경했는데도 여전히 같은 오류가 발생합니다.

해결책

2에서 Identity 2.0의 에서 한 을 했을 를 한 을 를 했을 User_Id위해서UserId인에AspUserClaims한 오류가 에서 table 대로 . 그렇게 한 후에 나는 같은 오류가 생겼지만 그 다음에 tschmit007이 말한 대로 추가했습니다.ApplicationDbContextUserStore시공자 그리고 지금 작동합니다.

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

저도 똑같은 문제를 겪고 있었습니다.저는 EDMX 파일로 데이터베이스 우선 개발을 하고 있습니다.
된결을는우때우에서 EDMX 파일을 추가할 때 생성된 연결 문자열을 하는 경우:base(“EDMXConnString”)당신은 아마도 이 문제를 갖게 될 겁니다.

ASP가 있는 데이터베이스를 가리키는 표준 연결 문자열을 만들어 이를 수정했습니다.NET Identity 테이블은.

<add name="MyConnString" connectionString="Data Source=server; Initial Catalog=db_name; User ID=user_id; Password=password; Connect Timeout=60;" providerName="System.Data.SqlClient" />

에 그 연결 을 사용했습니다.:base그리고 그게 효과가 있었어!

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("MyConnString")
    {
    }
}

제가 보기에 그것은 맥락적인 예증을 놓친 것 같습니다.

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>());

그래야 한다

UserManagerFactory = () => new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

를 사용하려고 . ADO 하려 입니다 는 된 를 입니다 하려 는 된 된 컨텍스트와 컨텍스트 NET 된 와 에 NET ApplicationDbContext위해 했습니다. 인증을 위해 별도의 연결 문자열을 사용하여 수정했습니다.제공자에게도 - 한e한oroyctoe 인증 컨텍스트의 경우 다음과 같이 해야 합니다.System.Data.SqlClient:

<add name="DefaultConnection" connectionString="Server=qadb.myserver.com;Database=mydb;User Id=myuser;Password=mypass;" providerName="System.Data.SqlClient" />

먼저 코드를 사용하는 경우 연결 문자열을 확인하여 providerName="에서와 같이 providerName이 'SqlClient'인지 확인하십시오."시스템.Data.Sql클라이언트

데이터베이스를 먼저 사용하는 경우 연결 문자열을 확인하여 providerName="에서와 같이 providerName이 'EntityClient'인지 확인하십시오."시스템.Data.Entity클라이언트

저에게도 같은 문제가 있습니다. 이 코드로 해결되었습니다.

public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
{
    Database.Connection.ConnectionString = @"data source=...;initial catalog=...;user id=...;password=...;multipleactiveresultsets=True;application name=EntityFramework";
}

저도 이 오류 메시지를 받았는데 원인과 해결 방법이 달랐습니다.제 경우에는 ApplicationUser 클래스에 Guid 유형의 ID 속성을 새로 도입했습니다.완벽하게 유효한 C# 구문이지만, 무언가를 찾기 위해 성찰에 의존하는 Identity 또는 EntityFramework 코어에 큰 혼란을 초래한 것으로 보입니다.

내 ApplicationUser 클래스에서 새 ID 속성을 제거하면 이 오류가 해결되었습니다.

저는 이 문제에 부딪혔고 그것은 개체 이름 충돌이었습니다.IdentityConfig.cs 은 ApplicationUser를 사용하고 있었지만 자동으로 생성된 ID 모델을 사용하고 있었습니다.컨텍스트의 DataAccess 대신 ApplicationUser.응용 프로그램 사용자.제가 찾은 이상 말이 되는군요그래서 저는 기본 WebAPI 템플릿에서 자동 생성된 IdentityModels.cs 을 삭제했습니다. 어쨌든 더 이상 사용하지 않습니다. 그리고 IdentityConfig.cs 의 using 문을 자신의 DataAccess 네임스페이스와 voila, 적절한 매핑에 추가했습니다.템플릿이 많은 부분을 만들어 주었다는 것을 잊어버린다면 문제에 봉착하게 될 것입니다.

public class ApplicationUserManager : UserManager<ApplicationUser> // the name conflict
{
    public ApplicationUserManager(IUserStore<ApplicationUser> store)
        : base(store)
    {
    }

문제는 새로운 DbContext를 만들었지만 IdentityDbContext에서 상속되지 않았다는 것입니다.

쉬운 해결책...

public partial class GoldfishDbContext : IdentityDbContext<ApplicationUser>
{
 ....
}

왜 이런 일이 발생하는지 확신할 수 없습니다. 제 솔루션은 완벽하게 잘 작동하고, 자기 전에 모든 것을 테스트했습니다.12시간 후에 다시 확인하고 실행해보니 정확히 같은 오류였습니다.여기 SO에서 거의 모든 솔루션을 시도해 보았지만 아무 것도 작동하지 않습니다.

저는 여기서 데이터베이스 접근법을 구현하고 있습니다.그런데 갑자기 이런 일이 생겼습니다.

기본 연결

제가 솔루션을 처음 만들 때 Visual Studio에서 생성한 web.config에 저장합니다.그래서 제 EDMX 파일에서 생성된 연결 문자열 대신 사용했는데 갑자기 작동합니다!

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }   
}

이것이 작동하는 연결 문자열이었습니다.

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-System.WEB-20180718085411.mdf;Initial Catalog=aspnet-System.WEB-20180718085411;Integrated Security=True" providerName="System.Data.SqlClient" />

원래는 EDMX 파일로 생성된 것을 사용하고 있는데 이전에 작동했는데 갑자기 웹사이트가 작동하지 않습니다.아무것도 변경하지 않았고 모든 코드가 TFS에 있었기 때문에 100% 작동한다고 확신하며 전체 복원을 수행하여 최신 버전을 얻었습니다.

<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-System.WEB-20180718085411.mdf;Initial Catalog=aspnet-System.WEB-20180718085411;Integrated Security=True" providerName="System.Data.SqlClient" />

종속성 주입 컨테이너를 사용하여 Application User Manager 및 기타 관련 종속성을 연결하려고 했기 때문에 이러한 문제가 발생했습니다.컨테이너에서 ApplicationDbContext를 해결한 경우도 있고, Owin에 내장된 인젝터에서 해결한 경우도 있습니다.

이런 일이 일어나지 않도록 하는 가장 쉬운 방법은 DI로 무엇을 하고 있는지 확실히 알지 못하는 한 DI 컨테이너를 사용하여 Auth 항목을 연결하지 않는 것입니다. 그렇지 않으면 내장된 주입기를 사용하여 Owin이 해결하도록 하는 것입니다.

즉, 다음과 같은 것을 제거합니다.

 builder.RegisterType<ApplicationUserManager>().InstancePerRequest();

그리고 오윈이 그것이 만들어진 방식으로 해결하게 해주세요.

 public ApplicationUserManager UserManager
    {
        get
        {
            return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
        }
        private set
        {
            _userManager = value;
        }
    }

언급URL : https://stackoverflow.com/questions/23893710/the-entity-type-applicationuser-is-not-part-of-the-model-for-the-current-context

반응형