直接看代碼
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 }