Entity Framework4.2 (十)CodeFirst(EF4 .2的Code First方法)(转)
2012-11-22 00:47
330 查看
长假归来,祝大家:龙年吉祥,龙马精神;福旺财旺事业旺,旺上加旺!!
差不多一个月没登录博客园了,呵呵。非常抱歉啦。
好了,闲言少叙,书归正传。呵呵。
==================================================
前面我有写过一篇《Entity Framework4.0 (三)概述(EF4 的Code First方法)》,目的是为了演示一下CodeFirst是怎么一回事。文章中的写法有些过时了,所以并不是项目中的推荐做法(Best Practice)。因为,现在我们使用功能更为完整的EF4.2的CodeFirst方法。
下面我们就开始喽!
说明:我们有两种方式添加EntityFramework.dll的引用:
1)使用NuGet将自动添加的是最新版本的EntityFramework 就是EF4.2的Dll。
EF4.2和EF4.1的区别就是修改了一个Bug: 详情参考:http://blogs.msdn.com/b/adonet/archive/2011/11/01/ef-4-2-released.aspx。
2)手动添加本地EntityFramework.dll引用的话,只能添加EF4.1而不是EF4.2,所以要下载安装EntityFramework41RC.下载地址:http://www.microsoft.com/download/en/details.aspx?id=18504
因为使用EF4.2的dll,所以我们先简单介绍在VS2010中的小插件Nuget的使用(它可以帮助我们引入 EntitiFramework.dll),并且我们有了NuGet的帮助,就没有必要下载安装EntityFramework41RC,更不必要安装更 老的EF版本的CTP了(但是我以自己的血的教训建议你不要试图卸载之前版本的EntityFramework的CTP或RC,因为那样有可能会引起你 的.Net Framework 或 VS2010出现问题滴)
说明:你也可以不安装这个很Cool的工具(但是那样你就只能手动添加EF4.1的dll了)
Program.cs
上面代码中分别演示了两种方法:
一种使用Annotation。
另一种是基于方法的:
未完待续。。。。
差不多一个月没登录博客园了,呵呵。非常抱歉啦。
好了,闲言少叙,书归正传。呵呵。
==================================================
前面我有写过一篇《Entity Framework4.0 (三)概述(EF4 的Code First方法)》,目的是为了演示一下CodeFirst是怎么一回事。文章中的写法有些过时了,所以并不是项目中的推荐做法(Best Practice)。因为,现在我们使用功能更为完整的EF4.2的CodeFirst方法。
下面我们就开始喽!
说明:我们有两种方式添加EntityFramework.dll的引用:
1)使用NuGet将自动添加的是最新版本的EntityFramework 就是EF4.2的Dll。
EF4.2和EF4.1的区别就是修改了一个Bug: 详情参考:http://blogs.msdn.com/b/adonet/archive/2011/11/01/ef-4-2-released.aspx。
2)手动添加本地EntityFramework.dll引用的话,只能添加EF4.1而不是EF4.2,所以要下载安装EntityFramework41RC.下载地址:http://www.microsoft.com/download/en/details.aspx?id=18504
因为使用EF4.2的dll,所以我们先简单介绍在VS2010中的小插件Nuget的使用(它可以帮助我们引入 EntitiFramework.dll),并且我们有了NuGet的帮助,就没有必要下载安装EntityFramework41RC,更不必要安装更 老的EF版本的CTP了(但是我以自己的血的教训建议你不要试图卸载之前版本的EntityFramework的CTP或RC,因为那样有可能会引起你 的.Net Framework 或 VS2010出现问题滴)
说明:你也可以不安装这个很Cool的工具(但是那样你就只能手动添加EF4.1的dll了)
Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity; using System.ComponentModel.DataAnnotations; namespace EF41CodeFirstDemo { class Program { static void Main(string[] args) { Random random = new Random(); using (MyContext context = new MyContext()) { Class cl = new Class(); cl.ClassName = "ClassName" + random.Next(); Course c1 = new Course() { CourseName = "course1Name" + random.Next() }; Course c2 = new Course() { CourseName = "course2Name" + random.Next() }; Course c3 = new Course() { CourseName = "course3Name" + random.Next() }; Student student = new Student(); student.StudentName = "Studentname" + random.Next(); student.Addre = new Address {StreetNumber=111,StreetName="address"+random.Next() }; student.DeliverAddre = new Address { StreetNumber = 222, StreetName = "deladdress" + random.Next() }; student.Courses.Add(c1); student.Courses.Add(c2); student.Courses.Add(c3); cl.Students.Add(student); context.Classes.Add(cl); context.SaveChanges(); } } } public class MyContext : DbContext { public DbSet<Student> Students {get;set; } public DbSet<Class> Classes{get;set;} public MyContext() { this.Configuration.LazyLoadingEnabled = true; Database.SetInitializer<MyContext>(new DropCreateDatabaseIfModelChanges<MyContext>()); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); //modelBuilder.Entity<Student>().ToTable("efdemo.StudentTable"); //modelBuilder.Entity<Student>().Property(x => x.StudentID) // .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // .IsRequired() // .HasColumnName("TheStudentID"); //modelBuilder.Entity<Student>().Property(x => x.StudentName) // .IsRequired() // .HasMaxLength(128) // .HasColumnName("TheStudentName"); //modelBuilder.Entity<Class>().ToTable("efdemo.ClassTable"); //modelBuilder.Entity<Class>().Property(x => x.ClassID) // .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // .IsRequired() // .HasColumnName("TheClassID"); modelBuilder.ComplexType<Address>(); modelBuilder.Entity<Student>().Property(x=>x.Addre.StreetName).HasColumnName("StreetName").IsRequired(); modelBuilder.Entity<Student>().Property(x => x.Addre.StreetNumber).HasColumnName("StreetNumber").IsRequired(); modelBuilder.Entity<Student>().Property(x => x.DeliverAddre.StreetNumber).HasColumnName("DeliverStreeNumber"); modelBuilder.Entity<Student>().Property(x => x.DeliverAddre.StreetName).HasColumnName("DeliverStreetName"); modelBuilder.Entity<Student>().HasMany<Course>(x => x.Courses) .WithMany(x => x.Students) .Map(m => { m.ToTable("StudentCourse") .MapLeftKey("StuID") .MapRightKey("CorID"); } ); } } [Table("efdemo.AnnoStudent",Schema="ef" )] public class Student { [Key] public int StudentID { get; set; } [Required] [MaxLength(120)] public string StudentName { get; set; } public Address Addre { get; set; } public Address DeliverAddre { get; set; } public virtual IList<Course> Courses { get; set; } public Student() { this.Courses = new List<Course>(); } } [Table("efdemo.AnnoClass",Schema="ef")] public class Class { [Key] [Column("AnnoClassID")] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ClassID { get; set; } public string ClassName { get; set; } public IList<Student> Students { get; set; } public Class() { this.Students = new List<Student>(); } } public class Address { public int StreetNumber { get; set; } [StringLength(125,MinimumLength=1)] public string StreetName { get; set; } } public class Course { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int CourseID { get; set; } [StringLength(125,MinimumLength=1)] public string CourseName { get; set; } public virtual IList<Student> Students { get; set; } public Course() { this.Students = new List<Student>(); } } }
上面代码中分别演示了两种方法:
一种使用Annotation。
[Table("efdemo.AnnoStudent",Schema="ef" )] public class Student {...}
另一种是基于方法的:
modelBuilder.ComplexType<Address>(); modelBuilder.Entity<Student>().Property(x=>x.Addre.StreetName).HasColumnName("StreetName").IsRequired();
未完待续。。。。
相关文章推荐
- Entity Framework4.2 (十)CodeFirst(EF4 .2的Code First方法)
- EF4 Code First和EF6 Code First链接mysql的方法
- EF Code First学习笔记 初识Code First
- 用VS2010自带的Library Package Manager安装EFCodeFirst出现“无法加载一个或多个请求的类型”错误的解决方法
- EF Code First学习笔记 初识Code First
- 使用ef code first模式,在部署后服务器端把数据库同步到最新版本的方法
- EFCodeFirst package 安装方法
- 什么是Code First(EF Code First 系列)
- 简单的Code First例子(EF Code-First系列)
- 用VS2010自带的Library Package Manager安装EFCodeFirst出现“无法加载一个或多个请求的类型”错误的解决方法
- EF Code First 中使用Jarek Kowalski's Provider的方法1
- 封装EF code first用存储过程的分页方法
- EFCodeFirst package 安装方法
- 用VS2010自带的Library Package Manager安装EFCodeFirst出现“无法加载一个或多个请求的类型”错误的解决方法
- EF和MVC系列文章导航:EF Code First、DbContext、MVC
- EF架构~CodeFirst生产环境的Migrations
- EF CodeFirst 使用T4模板 生成文件
- EF Code First Migrations数据库迁移
- EF-CodeFirst-3搞事
- MVC3教程之实体模型和EF CodeFirst