了解 entity framework 核心外键关系
understanding entity framework core foreign key relationships
我是第一次使用代码优先方法(我以前总是首先使用数据库),并且正在尝试理解一些基本概念。如果我在两个实体之间创建外键关系,entity framework 如何知道在关系的两侧使用哪些属性(列)?用一个简单的代码示例可能会更好地解释我的问题。我有两个实体,病人和治疗。一个病人可以有多个治疗,所以病人和治疗之间会有一对多的关系,两个实体之间存在外键关系。这是我的实体 类。请注意,为了便于解释,这些已大大简化。
public class Patient
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<PatientTreatment> PatientTreatment { get; set; }
}
public class PatientTreatment
{
public int Id { get; set; }
public string TreatmentDescription { get; set; }
public int PatientId { get; set; }
public virtual Patient Patient { get; set; }
}
因此,对于患者实体,主键将是 Id,而对于 PatientTreatment 实体,其主键也将是 Id
对于外键关系,根据我到目前为止的搜索,上面的代码会为我创建那个关系,这是正确的吗?如果是这样,entity framework 怎么知道 PatientTreatment 中的 PatientId 链接到 Patient 实体中的 Id?这就是它应该在数据库(SQL 服务器)中的方式,但我看不出 entity framework 是如何知道这一点的。我对代码优先方法真的很陌生,所以我只是想了解它是如何工作的。谁能给我解释一下?
我还读到,设置上述关系不会创建索引(PatientTreatment 中的 PatientId),因此这些也必须在代码中创建
EF 按照惯例工作,如 Caius .
你的情况:
- EF 知道有两个实体对象 -
Patient
和 PatientTreatment
,因为 类. 存在 dbSet 和可选配置
Patient
包含通向 PatientTreatment
的所谓导航 属性 - 一个集合,但它可能是实现 IEnumerable
的大部分内容 - EF 假设您想在这里建立关系。
Patient
有一个 Id
字段 - 没有任何配置的命名约定的 EF 将假定这是一个实体键。 PatientTreatment
也一样
PatientTreatment
有一个导航 属性 到单个 Patient
- 按照惯例,这再次告诉 EF 您希望这两个实体之间的关系是一对一的许多 - 一侧是集合,另一侧是单个参考。
即使在 PatientTreatment
中没有导航 属性,按照惯例也可以实现一对多 - 明确一点。
我是第一次使用代码优先方法(我以前总是首先使用数据库),并且正在尝试理解一些基本概念。如果我在两个实体之间创建外键关系,entity framework 如何知道在关系的两侧使用哪些属性(列)?用一个简单的代码示例可能会更好地解释我的问题。我有两个实体,病人和治疗。一个病人可以有多个治疗,所以病人和治疗之间会有一对多的关系,两个实体之间存在外键关系。这是我的实体 类。请注意,为了便于解释,这些已大大简化。
public class Patient
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<PatientTreatment> PatientTreatment { get; set; }
}
public class PatientTreatment
{
public int Id { get; set; }
public string TreatmentDescription { get; set; }
public int PatientId { get; set; }
public virtual Patient Patient { get; set; }
}
因此,对于患者实体,主键将是 Id,而对于 PatientTreatment 实体,其主键也将是 Id
对于外键关系,根据我到目前为止的搜索,上面的代码会为我创建那个关系,这是正确的吗?如果是这样,entity framework 怎么知道 PatientTreatment 中的 PatientId 链接到 Patient 实体中的 Id?这就是它应该在数据库(SQL 服务器)中的方式,但我看不出 entity framework 是如何知道这一点的。我对代码优先方法真的很陌生,所以我只是想了解它是如何工作的。谁能给我解释一下? 我还读到,设置上述关系不会创建索引(PatientTreatment 中的 PatientId),因此这些也必须在代码中创建
EF 按照惯例工作,如 Caius
你的情况:
- EF 知道有两个实体对象 -
Patient
和PatientTreatment
,因为 类. 存在 dbSet 和可选配置
Patient
包含通向PatientTreatment
的所谓导航 属性 - 一个集合,但它可能是实现IEnumerable
的大部分内容 - EF 假设您想在这里建立关系。Patient
有一个Id
字段 - 没有任何配置的命名约定的 EF 将假定这是一个实体键。PatientTreatment
也一样
PatientTreatment
有一个导航 属性 到单个Patient
- 按照惯例,这再次告诉 EF 您希望这两个实体之间的关系是一对一的许多 - 一侧是集合,另一侧是单个参考。
即使在 PatientTreatment
中没有导航 属性,按照惯例也可以实现一对多 - 明确一点。