Code First 约定

    Code First 约定


       Code First 使开发者可以用一个C#或者VB的类来描述一个model,model的基本特性根据约定进行检测。约定是一组可以根据C#或者VB的类定义生产概念模型的规则。这些约定位于System.Data.Entity.ModelConfiguration.Conventions命名空间下。

       开发者也可以用data annotations 或the fluent API来配置生产自己的模型。配置优先权按照 fluent API,data annotations ,conventions的顺序。

      Code First  的详细信息在API Documentation中可以找到。本文可以让开发者略览Code First约定。


   Type Discovery

    使用代码首先发展时,开发者一般先写作定义“概念模型”的.NET Framework类。要对定义好的.NET Framework类进行改动,你需要让DbContext知道你想在模型中添加什么类型。想实现这步,你需要定义一个继承DbContext的context class,并公开一个你想要包含在模型中的DbSet属性。Code First 将包含这些类型,也可以驱动任何引用类型,即便这些引用类型在完全不同的assembly中。

    如果你的类型中存在继承关系,你只需为基类定义DbSet属性,继承类将自动包含这些属性。

    在下面的例子中,  SchoolEntities class 只有一个DbSet属性(Departments)。 Code First 用这个属性来发现和检测引用类型。

 1 public class SchoolEntities : DbContext
 2 {
 3     public DbSet<Department> Departments { get; set; }
 4 }
 5 
 6 public class Department
 7 {
 8     // Primary key
 9     public int DepartmentID { get; set; }
10     public string Name { get; set; }
11 
12     // Navigation property
13     public virtual ICollection<Course> Courses { get; set; }
14 }
15 
16 public class Course
17 {
18     // Primary key
19     public int CourseID { get; set; }
20 
21     public string Title { get; set; }
22     public int Credits { get; set; }
23 
24     // Foreign key
25     public int DepartmentID { get; set; }
26 
27     // Navigation properties
28     public virtual Department Department { get; set; }
29 }
30     
31 public partial class OnlineCourse : Course
32 {
33     public string URL { get; set; }
34 }
35 
36 public partial class OnsiteCourse : Course
37 {
38     public string Location { get; set; }
39     public string Days { get; set; }
40     public System.DateTime Time { get; set; }
41 }

      如果你想从模型中排除类型,使用NotMapped属性或DbModelBuilder.Ignore fluent API。

    modelBuilder.Ignore<Department>();


     Primary Key Convention 

     Code First 根据属性名是否为"ID"或者以"ID"结尾来推断是否为主键。如果主键属性的类型是numeric或GUID,该列将被配置为一个标识列。

1 public class Department
2 {
3     // Primary key
4     public int DepartmentID { get; set; }
5 
6     . . . 
7 
8 }

 


 

     Relationship Convention

未完。。。

 

 

 

 

 

 

 

posted @ 2013-05-08 00:00  rovoqo  阅读(287)  评论(0编辑  收藏  举报