【问题标题】:Extending user profile with list of values使用值列表扩展用户配置文件
【发布时间】:2015-02-27 06:58:39
【问题描述】:

我使用值列表(组模型类)扩展了我的身份 ApplicationUser 配置文件(类):

 public class ApplicationUser : IdentityUser
 {
      public virtual ICollection<Group> group { get; set; }
    ...
 }

由于我的 Group 类是在解决方案的另一个项目中定义的,因此我无法在该类的 Web 项目中添加对 ApplicationUser(s) 的引用(循环引用完整性问题)。因此,当我运行 update-database ef 代码优先迁移时,创建了连接表 Groups 来连接 ApplicationUser 和 Group,它们有两列,一个来自 Group 类的键和一个 ApplicationUser 的 id 键。

我这里有一些问题。首先,生成的 Groups 表只有 Group id 作为主键,而不是两个 id。其次,当我尝试从我的应用程序中的用户中删除组或删除用户时,请尝试更新(设置为空)ApplicationUser 在加入组表中的 id 列,这是我不想要的。它需要删除该行。

我该如何解决这个问题?

【问题讨论】:

    标签: c# entity-framework asp.net-mvc-4 ef-code-first asp.net-identity-2


    【解决方案1】:

    您可以尝试一个流畅的配置来告诉 EF 如何处理这种关系,例如:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
    
       modelBuilder.Entity<ApplicationUser>()
                   .HasMany<Group>(g => g.Groups)
                   .WithMany(u => u.ApplicationUsers)
                   .Map(ug =>
                            {
                                ug.MapLeftKey("UserId");
                                ug.MapRightKey("GroupId");
                                ug.ToTable("UserGroup");
                            });
    
    }
    

    https://msdn.microsoft.com/en-us/data/jj591620.aspx

    【讨论】:

    • 我试过了,但正如我所说,在 Group 类(在 Data 项目中)我不能像在 Web 项目中那样引用 ApplicationUsers,因为它是循环依赖。
    • 好的,我的实体也在一个单独的项目中,但我将我的上下文保留在 Web 项目中。
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2021-12-30
    • 2012-03-11
    • 2018-01-26
    • 2010-12-26
    • 2013-06-19
    • 2021-07-05
    • 1970-01-01
    相关资源
    最近更新 更多