我有一个MVC 5项目,在该项目中我已将模型分离为一个独立的项目,例如Project.Models。身份(ApplicationUser)模型及其DbContext仍在主项目中,如默认MVC 5项目支架中所示。Project.Models程序集中的实体之一必须具有作为ApplicationUsers列表的属性。
现在,我开始认为将实体模型分离到一个单独的项目中并不是一个好主意,因为现在我在不同的上下文和程序集中拥有实体模型和Idenity模型。
如果这些ApplicaitonUsers在单独的程序集中,则如何使它们成为实体对象的一部分?我应该将项目合并回一个程序集和DbContexgt中,还是有一种简单的方法来解决此问题?我不能DbSet<MainProject.ApplicationUser>
在Project.Models的DbContext中定义一个,因为这将意味着循环引用。
谢谢。
您可以在“模型”项目中添加与身份相关的包Microsoft.AspNet.Identity
,Microsoft.AspNet.Identity.EntityFramework
然后将ApplicationUser
类移动到“模型”项目中。
您还可以像这样在ApplicationUser中添加配置文件数据:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, string> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
另外,要使其成为单个DBContext,可以直接从dbcontext类中的IdentityDbContext继承。像这样:
public partial class MyDBContext : IdentityDbContext<ApplicationUser>
{
public MyDBContext()
: base("name=DefaultConnection", throwIfV1Schema: false)
{
}
}
这样,您就无需DbSet<MainProject.ApplicationUser>
在上下文类中进行定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句