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 }

posted on 2013-03-04 12:53  幸福框架  阅读(9737)  评论(4编辑  收藏  举报

导航

我要啦免费统计