EF架构学习第一章

EF是ORM(实体映射)

1、实体对象
2、实体之间的关系
3、如何映射(映射规则)

EF三中模式
Database First //数据库优先
Model First  //模型优先
Code First //代码优先

一、EF来创建数据库
1、实体

在MVC解决方案中,Model文件夹内新建实体(类)

 1 /// <summary>
 2     /// 学生表
 3     /// </summary>
 4     public class Student
 5     {
 6         /// <summary>
 7         /// 学生编号(属性名为ID或者类名+ID 会自动生成为数据库的主键)
 8         /// </summary>
 9         public int StudentID { get; set; }
10         public string FirstName { get; set; }   //
11         public string LastName { get; set; }    //
12         public string FullName                  //全名
13         {
14             get
15             {
16                 return LastName + "." + FirstName;
17             }
18         }
19         public DateTime EnrollDate { get; set; }//登记时间
20         /*********************导航属性(引用属性  集合属性)*************************/
21         public ICollection<Enrollment> Enrollments { get; set; }
22     }
 1 /// <summary>
 2     /// 课程表
 3     /// </summary>
 4     public class Course
 5     {
 6         public int CourseID { get; set; }//课程ID自动为主键
 7         public string Title { get; set; }//课程名
 8         public int Credit { get; set; }//学分
 9         /*********************导航属性(引用属性  集合属性)*************************/
10         public ICollection<Enrollment> Enrollments { get; set; }
11     }
 1 /// <summary>
 2     /// 成绩表
 3     /// </summary>
 4     public class Enrollment
 5     {      
 6         public int EnrollmentID { get; set; }
 7         public int StudentID { get; set; }
 8         public int CourseID { get; set; }
 9         public decimal Score { get; set; }
10         /*********************导航属性(引用属性  集合属性)*************************/
11         public Student Student { get; set; }
12         public Course Course { get; set; }
13     }


2、配置上下文 DBContext

1.新建DAL文件夹,创建SchoolDataContext类

2.先引用命名空间

 

1 using System.Data.Entity;//引用此命名空间
2 using EFexample.Models;//引用模板(EFexample是解决方案名)
3 using System.Data.Entity.ModelConfiguration.Conventions;//用于映射

 

3.在SchoolDataContext类里面写入

public class SchoolDataContext:DbContext
    {
        //上下文会自动寻找与上下文同名的连接字符串

        //定义实体集(数据库中表名以属性的复数形式命名)
        public DbSet<Student> Students { get; set; }
        public DbSet<Course> Courses { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        
        /// <summary>
        /// 在模型创建的时候调用
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //移除在生产数据库表时 以复数形式的约定
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
           
        }          
    }

 

3、配置连接

打开Web.config配置连接 在这里name属性会自动查找类型名相同的上下文,如上面的SchoolDataContext

1 <!--配置连接-->
2   <connectionStrings>
3     <add name="SchoolDataContext"  connectionString=" server=.; uid=sa; pwd=123456; Database=MyReleaseDB;"  providerName="System.Data.SqlClient"/>
4     <!--name引用于DAL上下文(自动查找同名的)-->
5     <!--providerName引用的上下文-->
6     <!--connectionString数据库的链接串-->
7   </connectionStrings>

 

4、初始化数据库

打开Global.asax首先引用命名空间

1 using System.Data.Entity;//引用EF
2 using EFexample.DAL;//引用上下文

在Application_Start方法下追加以下代码

1  //初始化数据库应用程序启动的时候创建数据库
2             Database.SetInitializer<SchoolDataContext>(new SchoolInitializers());
3 //这里的SchoolInitializers是建在DAL文件下的初始化器

5、初始化数据

在DAL文件下新建新建SchoolInitializer初始化器,可用于上面的初始化数据库参数

1 using System.Data.Entity;//引用EF
2 using EFexample.Models;//引用Model

 

 1 public class SchoolInitializers:
  DropCreateDatabaseIfModelChanges<SchoolDataContext> 2 { 3 protected override void Seed(SchoolDataContext context) 4 { 5 List<Student> student = new List<Student>() 6 { 7 new Student{ 8 FirstName="Hu", 9 LastName="Langtao", 10 EnrollDate=DateTime.Parse("2014-11-29 20:50:02") 11 } 12 }; 13 student.ForEach(item => context.Students.Add(item)); 14 context.SaveChanges(); 15 } 16 }

 

posted @ 2014-11-29 23:03  Edwin_胡  阅读(182)  评论(0编辑  收藏  举报