实体框架中的外键
本文关键字:框架 实体 | 更新日期: 2023-09-27 17:50:17
我正在阅读这个教程....ASP。. NET Code First MVC教程
在这个例子中,Student Class有"ID"属性。
注册类有"StudentID"属性。
现在,如果Enrollment类中的所有附加定义都说
public virtual Student Student { get; set; }
仅仅通过该语句,EF是否知道StudentID是外键?
我的困惑是,在学生表中,属性名称是"ID"..比如在Enrollment Class中,我把它命名为....,而不是StudentIDStudent_ID……EF是否仍然与学生相关?ID与Enrollment相同。并建立外键?它是否只需要在Enrollment类的属性名称中的"Student"字符串来建立关系?
来自网站的代码片段…
using System;
using System.Collections.Generic;
namespace ContosoUniversity.Models
{
public class Student
{
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public virtual ICollection<Enrollment> Enrollments { get; set; }
}
}
namespace ContosoUniversity.Models
{
public enum Grade
{
A, B, C, D, F
}
public class Enrollment
{
public int EnrollmentID { get; set; }
public int CourseID { get; set; }
public int StudentID { get; set; }
public Grade? Grade { get; set; }
public virtual Course Course { get; set; }
public virtual Student Student { get; set; }
}
}
对于外键,Entity Framework遵循"约定优于配置"的方法。
"任何与主键属性具有相同数据类型且名称遵循以下格式之一的属性都表示该关系的外键:'[导航属性名称][主键属性名称]','[主体类名称][主键属性名称]'或'[主键属性名称]'。如果找到多个匹配项,则按照上面列出的顺序给出优先级。外键检测不区分大小写。"
来源:http://msdn.microsoft.com/en-us/data/jj679962.aspx
所以只要你遵循其中一个约定,它就会为你推断外键。如果您不遵循其中一种约定,那么您将不得不通过配置显式地声明它们之间的关系。