【发布时间】:2022-01-04 13:54:08
【问题描述】:
我第一次使用代码优先的方法(我以前总是首先使用数据库)并且我试图理解一些基本概念。如果我在两个实体之间创建外键关系,实体框架如何知道在关系的两侧使用哪些属性(列)?用一个简单的代码示例可能会更好地解释我的问题。我有两个实体,病人和治疗。一个病人可以有多个治疗,所以病人和治疗之间会有一对多的关系,两个实体之间存在外键关系。这是我的实体类。请注意,为了便于说明,这些都被大大简化了。
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
对于外键关系,根据我到目前为止搜索的内容,上面的代码将为我创建该关系,这是正确的吗?如果是这样,实体框架如何知道 PatientTreatment 中的 PatientId 与 Patient 实体中的 Id 相关联?这就是它应该在数据库(SQL Server)中的样子,但我看不出实体框架如何知道这一点。我对代码优先方法真的很陌生,所以我只是想了解它是如何工作的。谁能给我解释一下? 我还读到设置上述关系不会创建索引(PatientTreatment 中的 PatientId),因此这些也必须在代码中创建
【问题讨论】:
-
“Conventions”是您需要搜索的关键字,例如entityframeworktutorial.net/efcore/conventions-in-ef-core.aspx
-
所以约定是 PatientId 将自动用于从 PatientTreatment (PatientId) 到 Patient (Id) 的外键关系,因为我在类定义中包含了 Patient 实体以及 PatientId 作为整数属性?
标签: c# entity-framework foreign-keys