假设我们有两个实体类,User 和 Order,一个用户可以有多个订单。我们希望通过一对多关系实现它们之间的连接。
在 User 实体类中,我们需要添加一个包含 Order 实体类的集合属性:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public ICollection Orders { get; set; }
}
在 Order 实体类中,我们需要添加一个包含 User 实体类的外键属性:
public class Order
{
public int OrderId { get; set; }
public DateTime OrderDate { get; set; }
public int UserId { get; set; }
public User User { get; set; }
}
然后,我们需要使用 Entity Framework Core 创建这些实体类的数据库表和关联。
在我们的 DbContext 中添加以下代码来创建数据库:
public class MyDbContext : DbContext
{
public DbSet Users { get; set; }
public DbSet Orders { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasOne(o => o.User)
.WithMany(u => u.Orders)
.HasForeignKey(o => o.UserId);
}
}
这将创建一个名为 UserId 的外键,并将它映射到 User 实体类的主键。我们使用 WithMany 方法来指示一个用户可以有多个订单。
一旦我们创建了数据库,我们可以编写 Controller 的代码来检索数据:
public class UsersController : Controller
{
private readonly MyDbContext _context;
public UsersController(MyDbContext context)
{
_context = context;
}
public async Task GetUsers()
{
var users = await _context.Users.Include(u => u.Orders).ToListAsync();
return Ok(users);
}
}
注意,我们使用 Include 方法来包含 User 对象的所有订单。现在,我们就可以轻松地检索任意用户和它们的订单了。
上一篇:ASP.NETCoreWebAPI-EFCore7-多对多关系-查询单个结果需要集合返回类型才能构建/运行
下一篇:Asp.NetCoreWebAPI-ErrorCS0747Invalidinitializermemberdeclarator