EF 核心外键

问题描述 投票:0回答:1

我有一个关于 EF core 中外键的问题。假设我有这个:

public class User
{
    public int UserID{get;set;} // PK
    
}

public class Workout
{
  public int WorkoutID{get;set;} // PK
  public int UserID{get;set;}//FK, the userid that created this workout

}

这对我来说已经足够了。因为如果您需要获取创建锻炼 X 的用户,您可以在您创建的某些服务/存储库中使用 LINQ 一行完成。

我尝试学习 EF core 中的外键,在每个示例中我都看到它看起来像这样:

public class Workout
{
  public int WorkoutID{get;set;} // PK
  public int UserID{get;set;}
  [ForeignKey("UserID")]
  public User User{get;set;} // navigation property

}

这到底有什么作用以及它如何更好?当你只能保留 ID 时,在模型中再保留一个字段对我来说感觉很糟糕。有什么区别?

我对数据库还是个新手,有一些同理心。谢谢!

c# database entity-framework-core
1个回答
0
投票

导航属性的好处

  1. 简化查询:通过导航属性,您可以轻松加载 相关实体。例如:
var workouts = context.Workouts.Include(w => w.User).ToList();

这将在单个查询中加载所有锻炼及其相应的用户。

  1. 预加载:导航属性使您能够通过 Include 方法使用预加载,这对于通过在单个查询中获取相关数据来优化数据库访问非常有用。

  2. 更好的代码可读性:访问相关实体直接提高代码可读性。您可以执行以下操作,而不必手动执行连接:

var user = workout.User;
  1. 更改跟踪:EF Core 旨在与导航属性良好配合,从而更轻松地管理相关实体状态。当您修改锻炼的用户属性时,EF 可以更有效地跟踪更改。

  2. 关系定义:通过定义导航属性,您还可以使数据模型更具表现力。它清楚地表明了实体之间的关系,这对于其他任何人(或将来的您自己)阅读代码都有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.