首页 > 代码库 > EF架构学习第一章

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             get15             {16                 return LastName + "." + FullName;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;//引用EF2 using EFexample.DAL;//引用上下文

在Application_Start方法下追加以下代码

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

5、初始化数据

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

1 using System.Data.Entity;//引用EF2 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 }

 

EF架构学习第一章