首页 > 解决方案 > 如何使用 Entity Framework Core 创建连接表?

问题描述

我有以下两个实体/模型:

public class Achievement
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<User> Users { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public ICollection<Achievement> Achievements { get; set; }
}

如何使用上面的两个实体在 Entity Framework Core 中创建连接表?我所做的是否足以让 Entity Framework Core 了解关系并为其创建连接表?

我有多对多关系,我希望 Entity Framework Core 创建一个连接表,如:

public class UserAchievement 
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public int AchievementId { get; set; }
}

标签: c#entity-frameworkasp.net-core.net-coreentity-framework-core

解决方案


我做了更多的研究,发现目前还没有传统的方法可以让 Entity Framework Core 自动为多对多关系创建连接实体,但是在未来这可能是可能的

现在我们必须创建自己的连接实体并使用 Fluent API 对其进行配置。

加入实体:

public class UserAchievement 
{
    public int UserId { get; set; }
    public User User { get; set; }

    public int AchievementId { get; set; }
    public Achievement Achievement { get; set; }
}

其他实体:

public class Achievement
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<UserAchievement> UserAchievements { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public ICollection<UserAchievement> UserAchievements { get; set; }
}

然后在 DbContext 中使用 Fluent API 对其进行配置:

public class DataContext : DbContext
{

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserAchievement>().HasKey(ua => new { ua.UserId, ua.AchievementId });
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Achievement> Achievements { get; set; }
    public DbSet<UserAchievement> UserAchievements { get; set; }
}

推荐阅读