直接看代码
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using System.Data.Entity; 8 9 namespace Study.CodeFirst 10 { 11 class Program 12 { 13 static void Main(string[] args) 14 { 15 TestDropCreateDatabaseAlways(); 16 17 TestCreateDatabaseIfNotExists(); 18 19 TestDropCreateDatabaseIfModelChanges(); 20 } 21 22 private static void TestDropCreateDatabaseAlways() 23 { 24 //此处每次运行都会创建新的数据库,每次的Id都不一样 25 Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForDropCreateDatabaseAlways()); 26 27 using (SecurityContext context = new SecurityContext()) 28 { 29 Console.WriteLine(context.Users.First().Id); 30 Console.WriteLine(context.Users.First().Name); 31 } 32 } 33 34 private static void TestCreateDatabaseIfNotExists() 35 { 36 //此处只有第一次运行才会创建新的数据库,每次的Id都一样。 37 Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForCreateDatabaseIfNotExists()); 38 39 using (SecurityContext context = new SecurityContext()) 40 { 41 Console.WriteLine(context.Users.First().Id); 42 Console.WriteLine(context.Users.First().Name); 43 } 44 } 45 46 private static void TestDropCreateDatabaseIfModelChanges() 47 { 48 //测试此处需要修改User模型 49 //此处只有修噶模型运行才会创建新的数据库,模型变更后,每次的Id都一样。 50 Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForDropCreateDatabaseIfModelChanges()); 51 52 using (SecurityContext context = new SecurityContext()) 53 { 54 Console.WriteLine(context.Users.First().Id); 55 Console.WriteLine(context.Users.First().Name); 56 } 57 } 58 } 59 60 public class User 61 { 62 public Guid Id { get; set; } 63 64 public string Name { get; set; } 65 66 //public int Age { get; set; } 67 } 68 69 public class SecurityContext : DbContext 70 { 71 public DbSet<User> Users 72 { 73 get 74 { 75 return this.Set<User>(); 76 } 77 } 78 79 protected override void OnModelCreating(DbModelBuilder modelBuilder) 80 { 81 modelBuilder.Entity<User>(); 82 83 base.OnModelCreating(modelBuilder); 84 } 85 } 86 87 public class SecurityContextDatabaseInitializerForDropCreateDatabaseAlways : DropCreateDatabaseAlways<SecurityContext> 88 { 89 protected override void Seed(SecurityContext context) 90 { 91 context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "DropCreateDatabaseAlways" }); 92 93 base.Seed(context); 94 } 95 } 96 97 public class SecurityContextDatabaseInitializerForCreateDatabaseIfNotExists : CreateDatabaseIfNotExists<SecurityContext> 98 { 99 protected override void Seed(SecurityContext context) 100 { 101 context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "CreateDatabaseIfNotExists" }); 102 103 base.Seed(context); 104 } 105 } 106 107 public class SecurityContextDatabaseInitializerForDropCreateDatabaseIfModelChanges : DropCreateDatabaseIfModelChanges<SecurityContext> 108 { 109 protected override void Seed(SecurityContext context) 110 { 111 context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "DropCreateDatabaseIfModelChanges" }); 112 113 base.Seed(context); 114 } 115 } 116 }