【发布时间】:2015-12-04 23:58:37
【问题描述】:
我迷失了使用 MVC 5 模板附带的身份验证方法。
我需要将 CreateBy 用户包含在一个名为 client 的实体中,所以经过一些研究后我得出了这个结论:
型号:
[Table("Clients")]
public partial class Client
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual int UserCreated_Id { get; set; }
[ForeignKey("UserCreated_Id")]
public virtual ApplicationUser UserCreated { get; set; }
}
控制器方法:
client.UserCreated_Id = User.Identity.GetUserId<int>();
但我必须更改身份模型中的几乎所有内容:
来自
public class ApplicationUser : IdentityUser
到
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
因此有近 30 次更改。
但现在我有 2 个 DbContext:
身份上下文:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public ApplicationDbContext() : base("IPDB") {}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
我的应用程序上下文:
public class MyDbContext : DbContext
{
public MyDbContext() : base("IPDB")
{
// Tells Entity Framework that we will handle the creation of the database manually for all the projects in the solution
Database.SetInitializer<MyDbContext>(null);
}
public DbSet<Client> Clients { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// ANOTHER CHANGE I HAD TO MADE TO BE ABLE TO SCAFFOLDING
modelBuilder.Entity<ApplicationUserLogin>().HasKey<int>(l => l.UserId);
modelBuilder.Entity<ApplicationRole>().HasKey<int>(r => r.Id);
modelBuilder.Entity<ApplicationUserRole>().HasKey(r => new { r.RoleId, r.UserId });
}
}
我现在的问题是:
- 我需要 2 个 DbContext 吗?
- 我是否正确地将用户关联到客户端实体?
- 我需要创建一个所有用户的列表,以及其他信息,我会从 2 DbContext 中读取信息吗?
拜托,我需要一些明确的指导,因为我现在很困惑,我真的很喜欢编写出色的代码,但我认为事实并非如此。
【问题讨论】:
标签: c# asp.net-mvc asp.net-identity dbcontext