在ASP.NET Core应用程序中使用Entity Framework Core时,可以使用同一个主键映射在多个表之间建立外键关系。如果需要在同一个主键的ApplicationUser表中有多个外键关系,可以通过自定义关联表来解决。
以下为具体的解决步骤和示例代码:
需要创建一个中间表,将ApplicationUser表与其他表的关联关系映射到中间表中。在关联表中,需要包含ApplicationUserId和其他表的外键。
如下所示,假设需要将ApplicationUser与Book和Movie进行关联。
public class ApplicationDbContext : IdentityDbContext
{
public DbSet Books { get; set; }
public DbSet Movies { get; set; }
public DbSet ApplicationUserBooks { get; set; }
public DbSet ApplicationUserMovies { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity()
.HasKey(bc => new { bc.ApplicationUserId, bc.BookId });
builder.Entity()
.HasOne(bc => bc.ApplicationUser)
.WithMany(b => b.ApplicationUserBooks)
.HasForeignKey(bc => bc.ApplicationUserId);
builder.Entity()
.HasOne(bc => bc.Book)
.WithMany(c => c.ApplicationUserBooks)
.HasForeignKey(bc => bc.BookId);
builder.Entity()
.HasKey(bc => new { bc.ApplicationUserId, bc.MovieId });
builder.Entity()
.HasOne(bc => bc.ApplicationUser)
.WithMany(b => b.ApplicationUserMovies)
.HasForeignKey(bc => bc.ApplicationUserId);
builder.Entity()
.HasOne(bc => bc.Movie)
.WithMany(c => c.ApplicationUserMovies)
.HasForeignKey(bc => bc.MovieId);
}
}
需要创建一个实体类来表示ApplicationUser与其他表之间的关联关系。该实体类应该包含ApplicationUserId和其他表的外键。
例如,下面是ApplicationUserBook实体类的示例代码:
public class ApplicationUserBook
{
public string ApplicationUserId { get; set; }
public ApplicationUser ApplicationUser { get; set; }
public int BookId { get; set; }
public Book Book { get; set; }
}