Entity Framework:數據庫初始化的三種機制


直接看代碼

  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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM