1、根据自己的理解,Code First :通过实体类和相关配置生成对应的数据库,实现实体和数据库的映射关系,或通过实体类和相关配置与已经生成的实体与已经存在的数据库搭建映射关系
例:
实体类:StudentInfo、ClassInfo
1 public class ClassInfo 2 { 3 public int ID { get; set; } 4 public string Name { get; set; } 5 //每班都有很多学生 6 public ICollection<StudentInfo> Students { get; set; } 7 } 8 public class StudentInfo 9 { 10 public int ID { get; set; } 11 public string Name { get; set; } 12 public char Gender { get; set; } 13 public DateTime Birth { get; set; } 14 //每个学生都有自己所属的一个班级 15 public ClassInfo ClassInfo { get; set; } 16 }
上下文:CSContext
1 public class CSContext:DbContext 2 { 3 public CSContext():base("name=ConnStr") 4 { 5 } 6 //学生和班级的集合 7 public DbSet<StudentInfo> StudentInfos { get; set; } 8 public DbSet<ClassInfo> ClassInfos { get; set; } 9 } 10
配置文件:App.Config
1 ... 2 <connectionStrings> 3 <add name="ConnStr" connectionString="Server=localhost;DataBase=EFDemo;User ID=sa;password=***" providerName="System.Data.SqlClient"/> 4 </connectionStrings> 5 ...
控制台:
1 static void Main(string[] args) 2 { 3 //ID自动映射为数据库的主键 4 ClassInfo classinfo = new Entities.ClassInfo() { 5 Name="一班" 6 }; 7 StudentInfo studentinfo = new Entities.StudentInfo() { 8 Name = "王亮", 9 Gender = '男', 10 Birth = Convert.ToDateTime("1980-01-01") 11 }; 12 var context = new CSContext(); 13 //context.Entry<StudentInfo>(studentinfo).State = System.Data.Entity.EntityState.Added; 14 //context.Set<StudentInfo>().Add(studentinfo); 15 //context.StudentInfos.Add(studentinfo); 16 context.Entry<ClassInfo>(classinfo).State = System.Data.Entity.EntityState.Added; 17 context.SaveChanges(); 18 Console.WriteLine("OK"); 19 Console.ReadKey(); 20 }
数据库:自动创建对应database 、table及插入数据(自动产生对应的主外键)
1 ... 2 exec sp_executesql N'INSERT [dbo].[ClassInfoes]([Name]) 3 VALUES (@0) 4 SELECT [ID] 5 FROM [dbo].[ClassInfoes] 6 WHERE @@ROWCOUNT > 0 AND [ID] = scope_identity()',N'@0 nvarchar(max) ',@0=N'一班' 7 ...