我正在使用 ASP.NET 和实体框架构建一个简单的应用程序。我希望用户能够登录,创建一个“角色”,并显示在特定用户帐户上创建的所有角色。
我正在使用 PostgreSQL 数据库,为了实现我正在寻找的功能,我在
Characters
表中创建了一个列来填充 ApplicationUsers
表中的用户 ID。
问题是,我不知道如何在创建新角色时用用户 ID 填充该列。该角色在
Character
表中创建,但 UserId
列填充为 NULL。
这些是我的数据模型:
public class ApplicationUser : IdentityUser
{
[PersonalData]
[Column(TypeName = "varchar(100)")]
public string FirstName { get; set; }
[PersonalData]
[Column(TypeName = "varchar(100)")]
public string LastName { get; set; }
[ForeignKey("UserId")]
public List<Character> Character { get; set; }
}
public class Character
{
[Key]
public int Id { get; set; }
[Required]
public string CharacterName { get; set; }
public int Age { get; set; }
public string Profession { get; set; }
public string UserId { get; set; }
}
这些是我在 PostgreSQL 中的表:
这是我的 DbContext:
public class AuthDbContext : IdentityDbContext<ApplicationUser>
{
public AuthDbContext(DbContextOptions<AuthDbContext> options)
: base(options)
{
}
public DbSet<Character> Characters { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
我尝试了不同的组合:在 .NET 方面只有外键标记,在 PostgreSQL 中的
Characters
表中添加外键约束,只有外键约束,将以下代码添加到 DbContext
:
{
base.OnModelCreating(builder);
builder.Entity<Character>()
.HasOne(m => m.ApplicationUser)
.WithMany(m => m.Character);
}
如前所述,我想要发生的是用
UserId
表中的 Id 填充 Characters
表中的 AspNetUsers
列。
您需要将 HasForeignKey() 添加到您的模型构建器中:
{
base.OnModelCreating(builder);
builder.Entity<Character>()
.HasOne(m => m.ApplicationUser)
.WithMany(m => m.Character)
.HasForeignKey(m => m.UserId);
}