我正在尝试将实体框架与默认成员资格“aspnetdb”数据库一起使用。
我在使用会员资格和用户表时遇到问题,因为我想拥有从会员资格到用户的导航属性。
我觉得我已经尝试了流畅的api映射的每一种组合,但我必须遗漏一些东西 - 或者当外键是UserId时它可能无法完成 - 这是两个表的主键好?
这就是我所拥有的:
public class Membership {
[Key]
public Guid UserID { get; set; }
public String Password { get; set; }
public virtual User User { get; set; }
}
public class User {
[Key]
public Guid UserId { get; set; }
public String UserName { get; set; }
//public virtual Membership Membership { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Membership>().ToTable("dbo.aspnet_Membership");
modelBuilder.Entity<Role>().ToTable("dbo.aspnet_Roles");
modelBuilder.Entity<User>().ToTable("dbo.aspnet_Users");
modelBuilder.Entity<User>()
.HasMany(m => m.Roles)
.WithMany(m => m.Users)
.Map(m => {
m.ToTable("aspnet_UsersInRoles");
m.MapLeftKey("UserId");
m.MapRightKey("RoleId");
});
//modelBuilder.Entity<Membership>()
// .HasRequired(m => m.User);
//.WithOptionalPrincipal(m => m.Membership).Map(m=>m.MapKey("UserId"));
Database.SetInitializer<EkomiteDBC>(null);
base.OnModelCreating(modelBuilder);
}
角色设置正常并且有效,但无论我如何尝试定义成员资格和用户之间的连接,我都会遇到不同的映射错误。
我知道我可能遗漏了一些基本的东西,有人可以帮忙吗?
编辑:问题似乎是“成员资格”和“用户”表都有主键“UserID”。
答案 0 :(得分:2)
试试这个:
modelBuilder.Entity<Membership>()
.HasRequired(m => m.User)
.WithOptional(u => u.Membership);
无论如何你根本不应该这样做。使用标准成员资格API访问这些表。这些表不属于您的属于会员/角色API,通过EF处理它们只是删除或中断API提供的开箱即用功能 - 通常会降低安全性,因为这些表可用于EF和业务规则中的更新来自会员/角色API将不会被强制执行。