gpt4 book ai didi

c# - 实体类型 ApplicationUser 不是当前上下文模型的一部分

转载 作者:IT王子 更新时间:2023-10-29 03:53:32 27 4
gpt4 key购买 nike

我正在从 Identity 1.0.0 迁移到 Identity 2.0.1 之后 article

并且生成的迁移代码与新的 IdentityUser 无关。它不会添加新列。

所以我做了一个新项目并再次尝试,但是迁移代码是空的。

为了解决这个问题,我直接在 SQL Server 中进行了编辑,然后在我的解决方案中再次导入了我的数据库。

现在我的 AspNetUser 和我的 IdentityUser 完全一样了

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")
{

}
}

AspNetUser

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

当我尝试注册用户时出现以下异常

The entity type ApplicationUser is not part of the model for the current context

在这条线上

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

我的startup.Auth.cs

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

在我的 AccountController 中,我这样声明我的 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 类中的新属性外,我没有更改任何内容,并且它在迁移之前一直运行良好。

CodePlex 上也有类似的问题标记为固定但他们没有给出解决方案

有人知道如何解决这个问题吗?

编辑

确保我在编辑 SQL 数据库时没有犯任何错误。我创建了另一个项目并生成了一个身份数据库,我更改了该数据库的连接字符串,但我仍然遇到相同的错误。

解决方案

当我编辑我的数据库时,我没有注意到在 Identity 2.0.0 中他们更改了 AspUserClaims 表中的 UserIdUser_Id .这样做之后,我遇到了同样的错误,但后来我做了 tschmit007 所说的关于将 ApplicationDbContext 添加到 UserStore 构造函数的操作,现在它可以工作了。

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

最佳答案

我遇到了同样的问题。我正在使用 EDMX 文件进行数据库优先开发。
如果您使用的是在 :base(“EDMXConnString”) 中添加 EDMX 文件时生成的连接字符串,您很可能会有这个问题。

我通过创建一个指向 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")
{
}
}

关于c# - 实体类型 ApplicationUser 不是当前上下文模型的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893710/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com