c# - 如何使用 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; }
}
解决方案
我做了更多的研究,发现目前还没有传统的方法可以让 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; }
}
推荐阅读
- r - 错误:参数 20 匹配 venn.diagram 函数中的多个形式参数
- javascript - Javascript 正则表达式总是从最后找到匹配项?
- css - 将元素 x% 与 flexbox 一起定位?
- rest - SwiftUI:如何更新 NavigationView 详细信息屏幕?
- python - 使用 Pandas 的 Kivy 应用程序在使用 Buildozer 打包的 Android 上崩溃
- java - MongoDB java API 聚合 $lookup 和管道使用变量
- javascript - 如何在javascript中使用python中的字典或列表?
- perl - Perl 中如何通过列表分配进行字数统计?
- scala - Run intellij scala formatter from the command line
- android - 如何在 Web 应用程序上访问 android google 帐户