我想在AspNetUser和Movie之间建立一个1:n的关系,这样一个用户可以拥有很多电影。
因此我添加了以下内容:
public class ApplicationUser : IdentityUser
{
public virtual ICollection<Movie> Movies{ get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> 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;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<Movie> Movie { get; set; }
}
但现在我遇到的问题是我无法引用AspNetUser,因为没有AspNetUserModel。
public partial class Movie
{
public long MovieId { get; set; }
[Required]
[StringLength(100)]
public string name { get; set; }
}
因此,当我现在创建数据库时,Movie表具有主键ID,属性Name和与AspNetUser Id关系的外键ApplicationUser_Id。
所以基本上我得到了我想要的东西,但是我现在如何才能访问这个属性,因为在我的模型中我想念它。
答案 0 :(得分:1)
试试这个:
public partial class Movie
{
public long MovieId { get; set; }
[Required]
[StringLength(100)]
public string name { get; set; }
[Required]
public string UserId { get; set; }
[ForeignKey("UserId")]
public virtual ApplicationUser Owner {set;get;}
}
实际上,重点在于您无法将导航属性设置为“必需”,因为它是EF为您解析的内容,而不是DB中的字段。这就是为什么你需要将FK属性设置为required并将其与导航属性([ForeignKey()]
属性)连接起来
答案 1 :(得分:0)
我稍微调整了你的解决方案,现在它可以工作......
public partial class Movie
{
public long MovieId { get; set; }
[Required]
[StringLength(100)]
public string name { get; set; }
[ForeignKey("Owner")]
public string OwnerID { get; set; }
public virtual ApplicationUser Owner {set;get;}
}
不幸的是,当我支撑模型时,它会创建一些
ViewBag.OwnerID = new SelectList(db.ApplicationUsers, "Id", "Email", film.OwnerID);
但ApplicationDbContext不包含db.ApplicationUsers,因此会抛出错误。因此,他将其改为。
ViewBag.OwnerID = new SelectList(db.Users, "Id", "Email");
现在它有效....