请帮助。我整天都没有重做系统的各个部分,尝试了很多不同的解决方案,但我最终没有任何想法。
我有一个相同应用程序的解决方案。在其中一个应用程序(我尝试隔离数据持久性)中,我使用Entity Framework中的DataBase First方法创建了上下文。注意:我已经在数据库中包含了创建脚本Identity表。
在我的解决方案的另一层中,我添加了一个没有用户控制的纯MVC应用程序。所以我添加了nuget,Entity Framework和Identity。
最后我创建了ApplicationUser,IdentityDbContext和ApplicationRoleManager:
public partial class ApplicationUser : IdentityUser
{
[Display(Name = "Usuario", Description = "Identificação para Login")]
[Required(ErrorMessage = "000027 - O Login não pode ser vazio ou nulo.")]
[MaxLength(30, ErrorMessage = "000028 - O Login pode ter no máximo 30 caracteres.")]
[DuplicadoNaBase("AspNetUsersDao", "SelecionarPorLogin", ErrorMessage = "000031 - O Login informado já existe na base de dados.")]
public string LOGIN { get; set; }
[NotMapped]
[Display(Name = "Senha", Description = "Senha para Login")]
[Required(ErrorMessage = "000029 - A senha não pode ser vazia ou nula.")]
[MaxLength(30, ErrorMessage = "000030 - A senha pode ter no máximo 30 caracteres.")]
[DataType(DataType.Password)]
public string SENHA { get; set; }
public virtual USUARIOS USUARIOS { get; set;}
[NotMapped]
public string Perfil { get; set; }
}
public class GPSdEntitiesIdentity : IdentityDbContext<ApplicationUser>
{
public GPSdEntitiesIdentity() : base("IdentityConnection")
{
}
}
public class ApplicationRoleManager : RoleManager<IdentityRole, string>
{
public ApplicationRoleManager(IRoleStore<IdentityRole, string> roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
{
return new ApplicationRoleManager(new RoleStore<IdentityRole>(new GPSdEntities()));
}
}
基本上我的问题发生了,因为我已经有了一个带有USER表的数据库。最初我尝试将我的USER表与AspNetUser合并。但它没有用,因为AspNetUser有GUID(字符串Id),我不得不在数据库中重做很多关系。所以我保留了两张桌子。我在我的USERS表中添加了一个IdAspNetUser,他们之间有一对一的关系。
我创建了一个与ApplpicationUser配合使用的View来注册用户,它运行正常。但我觉得这很奇怪,因为我有一个userManager.add,然后是1个ContextPerformance.USUARIOS.Add。由于它们之间的关系是1比1,所以我有一个绝妙的想法,即在ApplicationUser中添加一个虚拟属性USERS USERS {get;当我开始犯错误和单圈时间的时候。
当我尝试:
private UserManager<ApplicationUser> userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new GPSdEntitiesIdentity()));
List<ApplicationUser> ApplicationUsers = new List<ApplicationUser>();
ApplicationUsers = userManager.Users.ToList();
我收到以下错误:
System.Data.Entity.ModelConfiguration.ModelValidationException&#34;在模型生成期间检测到一个或多个验证错误: GPSd.Web.MVC.IdentityContext.AspNetUserLogins :: EntityType &#39; AspNetUserLogins&#39;没有定义键。为此设置密钥 的EntityType。 AspNetUserLogins:EntityType:EntitySet&#39; AspNetUserLogins&#39; 基于类型&#39; AspNetUserLogins&#39;没有定义键。&#34;
如果我将ApplicationUser中的USERS虚拟属性标记为[NotMapped],则应用程序再次运行,但是我必须单独保存AspNetId和USER
我试图做这样简单的事情:
ApplicationUser identityUser = new ApplicationUser
{
UserName = model.LOGIN,
LOGIN = model.LOGIN,
SENHA = model.SENHA,
USERS = model.USERS
};
IdentityResult resultado = userManager.Create(identityUser, model.SENHA);
答案 0 :(得分:0)
在GPSdEntitiesIdentity
添加:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUserLogin>()
.HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId })
.ToTable("AspNetUserLogins");// Database Table Name
}