您的位置:首页 > 数据库

Entity Framework:数据库初始化的三种机制

2013-03-04 12:53 197 查看

直接看代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Data.Entity;

namespace Study.CodeFirst
{
class Program
{
static void Main(string[] args)
{
TestDropCreateDatabaseAlways();

TestCreateDatabaseIfNotExists();

TestDropCreateDatabaseIfModelChanges();
}

private static void TestDropCreateDatabaseAlways()
{
//此处每次运行都会创建新的数据库,每次的Id都不一样
Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForDropCreateDatabaseAlways());

using (SecurityContext context = new SecurityContext())
{
Console.WriteLine(context.Users.First().Id);
Console.WriteLine(context.Users.First().Name);
}
}

private static void TestCreateDatabaseIfNotExists()
{
//此处只有第一次运行才会创建新的数据库,每次的Id都一样。
Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForCreateDatabaseIfNotExists());

using (SecurityContext context = new SecurityContext())
{
Console.WriteLine(context.Users.First().Id);
Console.WriteLine(context.Users.First().Name);
}
}

private static void TestDropCreateDatabaseIfModelChanges()
{
//测试此处需要修改User模型
//此处只有修噶模型运行才会创建新的数据库,模型变更后,每次的Id都一样。
Database.SetInitializer<SecurityContext>(new SecurityContextDatabaseInitializerForDropCreateDatabaseIfModelChanges());

using (SecurityContext context = new SecurityContext())
{
Console.WriteLine(context.Users.First().Id);
Console.WriteLine(context.Users.First().Name);
}
}
}

public class User
{
public Guid Id { get; set; }

public string Name { get; set; }

//public int Age { get; set; }
}

public class SecurityContext : DbContext
{
public DbSet<User> Users
{
get
{
return this.Set<User>();
}
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>();

base.OnModelCreating(modelBuilder);
}
}

public class SecurityContextDatabaseInitializerForDropCreateDatabaseAlways : DropCreateDatabaseAlways<SecurityContext>
{
protected override void Seed(SecurityContext context)
{
context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "DropCreateDatabaseAlways" });

base.Seed(context);
}
}

public class SecurityContextDatabaseInitializerForCreateDatabaseIfNotExists : CreateDatabaseIfNotExists<SecurityContext>
{
protected override void Seed(SecurityContext context)
{
context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "CreateDatabaseIfNotExists" });

base.Seed(context);
}
}

public class SecurityContextDatabaseInitializerForDropCreateDatabaseIfModelChanges : DropCreateDatabaseIfModelChanges<SecurityContext>
{
protected override void Seed(SecurityContext context)
{
context.Users.Add(new User() { Id = Guid.NewGuid(), Name = "DropCreateDatabaseIfModelChanges" });

base.Seed(context);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: