博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework4.2 (十)CodeFirst(EF4 .2的Code First方法)
阅读量:5360 次
发布时间:2019-06-15

本文共 6869 字,大约阅读时间需要 22 分钟。

长假归来,祝大家:龙年吉祥,龙马精神;福旺财旺事业旺,旺上加旺!!

差不多一个月没登录博客园了,呵呵。非常抱歉啦。

好了,闲言少叙,书归正传。呵呵。

==================================================

前面我有写过一篇《》,目的是为了演示一下CodeFirst是怎么一回事。文章中的写法有些过时了,所以并不是项目中的推荐做法(Best Practice)。因为,现在我们使用功能更为完整的EF4.2的CodeFirst方法。

下面我们就开始喽!

说明:我们有两种方式添加EntityFramework.dll的引用:

1)使用NuGet将自动添加的是最新版本的EntityFramework 就是EF4.2的Dll。

 EF4.2和EF4.1的区别就是修改了一个Bug: 详情参考:。

2)手动添加本地EntityFramework.dll引用的话,只能添加EF4.1而不是EF4.2,所以要下载安装EntityFramework41RC.下载地址:

 因为使用EF4.2的dll,所以我们先简单介绍在VS2010中的小插件Nuget的使用(它可以帮助我们引入EntitiFramework.dll),并且我们有了NuGet的帮助,就没有必要下载安装EntityFramework41RC,更不必要安装更老的EF版本的CTP了(但是我以自己的血的教训建议你不要试图卸载之前版本的EntityFramework的CTP或RC,因为那样有可能会引起你的.Net Framework 或 VS2010出现问题滴)

说明:你也可以不安装这个很Cool的工具(但是那样你就只能手动添加EF4.1的dll了)

安装完成以后,为了安全起见,最好重启下VS2010.

打开一个NuGet的命令行窗体,如果显示:

Type 'get-help NuGet' to see all available NuGet commands.

表示安装Nuget成功。

如果你使用的是Xp SP3的操作系统,有可能因为缺少Power shell2.0而提示出错。

此时只需要安装Power Shell2.0即可:地址,在页面的中下部,找到适合自己机器操作系统的Windows Management Framework ,下载并安装。然后重启VS2010.

(如果在安装power shell2.0的时候,提示power shell不兼容错误时是因为之前机器装有PowerShell1.0.此时解决办法是打开“控制面板”的“添加删除程序”,注意:需要选中“显示更新”复选框才能看到PowerShell1.0,让后删除powershelll 1.0,再安装2.0即可)

3.新建咱们的Code First 解决方案:

File->New ->Project... 选择C# 的Console Application .命名为:EF41CodeFirstDemo

a)如果你在前面没有安装NuGet的话,可以在项目的References上右键,手动添加.NET标签下的EntityFramework引用.

b)如果你已经成功安装NuGet的话,在Packager Manager Console里面输入:install-package entityframework (注意:命令行内容不区分大小写滴,呵呵),此时NuGet到它的package库中下载并安装最新的EntityFramework.dll,手动的话,你是安装本地的EntityFramework.dll,因为前面安装过了EntityFramework RC了。

在Program.cs中添加如下代码:

Program.cs
1 using System;   2 using System.Collections.Generic;   3 using System.Linq;   4 using System.Text;   5 using System.Data.Entity;   6 using System.ComponentModel.DataAnnotations;   7   8 namespace EF41CodeFirstDemo   9 {
10 class Program 11 {
12 static void Main(string[] args) 13 {
14 Random random = new Random(); 15 16 using (MyContext context = new MyContext()) 17 {
18 Class cl = new Class(); 19 cl.ClassName = "ClassName" + random.Next(); 20 21 22 Course c1 = new Course() { CourseName = "course1Name" + random.Next() }; 23 Course c2 = new Course() { CourseName = "course2Name" + random.Next() }; 24 Course c3 = new Course() { CourseName = "course3Name" + random.Next() }; 25 26 Student student = new Student(); 27 student.StudentName = "Studentname" + random.Next(); 28 student.Addre = new Address {StreetNumber=111,StreetName="address"+random.Next() }; 29 student.DeliverAddre = new Address { StreetNumber = 222, StreetName = "deladdress" + random.Next() }; 30 student.Courses.Add(c1); 31 student.Courses.Add(c2); 32 student.Courses.Add(c3); 33 34 35 36 cl.Students.Add(student); 37 38 context.Classes.Add(cl); 39 40 41 context.SaveChanges(); 42 } 43 } 44 } 45 46 public class MyContext : DbContext 47 {
48 public DbSet
Students {
get;set; } 49 public DbSet
Classes{
get;set;} 50 51 public MyContext() 52 {
53 this.Configuration.LazyLoadingEnabled = true; 54 Database.SetInitializer
(new DropCreateDatabaseIfModelChanges
()); 55 } 56 57 58 protected override void OnModelCreating(DbModelBuilder modelBuilder) 59 {
60 base.OnModelCreating(modelBuilder); 61 //modelBuilder.Entity
().ToTable("efdemo.StudentTable"); 62 //modelBuilder.Entity
().Property(x => x.StudentID) 63 // .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 64 // .IsRequired() 65 // .HasColumnName("TheStudentID"); 66 67 //modelBuilder.Entity
().Property(x => x.StudentName) 68 // .IsRequired() 69 // .HasMaxLength(128) 70 // .HasColumnName("TheStudentName"); 71 72 //modelBuilder.Entity
().ToTable("efdemo.ClassTable"); 73 //modelBuilder.Entity
().Property(x => x.ClassID) 74 // .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 75 // .IsRequired() 76 // .HasColumnName("TheClassID"); 77 78 modelBuilder.ComplexType
(); 79 modelBuilder.Entity
().Property(x=>x.Addre.StreetName).HasColumnName("StreetName").IsRequired(); 80 modelBuilder.Entity
().Property(x => x.Addre.StreetNumber).HasColumnName("StreetNumber").IsRequired(); 81 modelBuilder.Entity
().Property(x => x.DeliverAddre.StreetNumber).HasColumnName("DeliverStreeNumber"); 82 modelBuilder.Entity
().Property(x => x.DeliverAddre.StreetName).HasColumnName("DeliverStreetName"); 83 84 modelBuilder.Entity
().HasMany
(x => x.Courses) 85 .WithMany(x => x.Students) 86 .Map(m => 87 { 88 m.ToTable("StudentCourse") 89 .MapLeftKey("StuID") 90 .MapRightKey("CorID"); 91 92 } 93 ); 94 95 } 96 } 97 98 [Table("efdemo.AnnoStudent",Schema="ef" )] 99 public class Student 100 { 101 [Key] 102 public int StudentID { get; set; } 103 104 [Required] 105 [MaxLength(120)] 106 public string StudentName { get; set; } 107 108 public Address Addre 109 { 110 get; 111 set; 112 } 113 114 public Address DeliverAddre 115 { 116 get; 117 set; 118 } 119 120 public virtual IList
Courses { get; set; } 121 122 public Student() 123 { 124 this.Courses = new List
(); 125 } 126 } 127 128 [Table("efdemo.AnnoClass",Schema="ef")] 129 public class Class 130 { 131 [Key] 132 [Column("AnnoClassID")] 133 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 134 public int ClassID { get; set; } 135 public string ClassName { get; set; } 136 public IList
Students { get; set; } 137 138 public Class() 139 { 140 this.Students = new List
(); 141 } 142 } 143 144 145 public class Address 146 { 147 148 public int StreetNumber 149 { 150 get; 151 set; 152 } 153 154 155 [StringLength(125,MinimumLength=1)] 156 public string StreetName 157 { 158 get; 159 set; 160 } 161 } 162 163 public class Course 164 { 165 [Key] 166 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 167 public int CourseID 168 { 169 get; 170 set; 171 } 172 173 [StringLength(125,MinimumLength=1)] 174 public string CourseName { get; set; } 175 176 public virtual IList
Students { get; set; } 177 178 public Course() 179 { 180 this.Students = new List
(); 181 } 182 } 183 184 }

上面代码中分别演示了两种方法:

一种使用Annotation。

1  [Table("efdemo.AnnoStudent",Schema="ef" )]   2   public class Student     {...}

另一种是基于方法的:

1  modelBuilder.ComplexType
(); 2 3 modelBuilder.Entity
().Property(x=>x.Addre.StreetName).HasColumnName("StreetName").IsRequired();

未完待续。。。。

转载于:https://www.cnblogs.com/marksun/archive/2012/02/02/2331310.html

你可能感兴趣的文章
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Servlet接收JSP参数乱码问题解决办法
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
Zookeeper概述
查看>>
Linux自己安装redis扩展
查看>>
luoguP3414 SAC#1 - 组合数
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
Spring mvc初学
查看>>
VTKMY 3.3 VS 2010 Configuration 配置
查看>>
01_1_准备ibatis环境
查看>>
windows中修改catalina.sh上传到linux执行报错This file is needed to run this program解决
查看>>