实体框架中的外键

时间:2014-03-13 15:52:57

标签: c# asp.net-mvc entity-framework

我正在阅读本教程.... ASP.NET Code First MVC Tutorial

在此示例中,学生班级具有" ID"属性。

注册课程有#34; StudentID"属性。

现在,如果Enrollment类中的所有其他定义都显示,

                public virtual Student Student { get; set; }

仅仅通过该声明,EF是否知道StudentID是外键?

我的困惑是,在学生表中,属性名称是" ID" ..在注册类中说,而不是StudentID,我称之为.... Student_ID .... EF仍然会将Student.ID与Enrollment.Student_ID相关联并建立外键吗?它只需要"学生"在Enrollment类的属性名中建立关系?

网站的代码段......

       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; }
           }
       }

1 个答案:

答案 0 :(得分:0)

实体框架遵循&#34;约定优于配置&#34;关于外键的方法。

&#34;与主要主键属性具有相同数据类型且名称遵循以下格式之一的任何属性表示关系的外键:'[导航属性名称] [主要主键属性name]','[主要类名] [主键属性名]'或'[主要主键属性名]'。如果找到多个匹配,则按上面列出的顺序给出优先级。外键检测不区分大小写。 &#34;

来源:http://msdn.microsoft.com/en-us/data/jj679962.aspx

因此,只要您遵循其中一个约定,它就会为您推断出外键。如果您不遵循其中一项约定,则必须通过配置明确说明关系。