DbContext 那些事 —— 数据库初始化

数据库初始化

上图,这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数。

在上面的图中,context类中的base构造器中,可以填入下面的参数:

  • 无参数(No Parameter)
  • 数据库的名字(Database Name)
  • 连接字符串的名字(Connection String Name)

无参数


 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data.Entity;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace EF1
 9 {
10    public class DbContextClass:DbContext
11     {
12        public DbContextClass()
13            : base()
14        { }
15        public DbSet<Student> Studnets { get; set; }
16
17        public DbSet<Standard> Standards { get; set; }
18
19
20        protected override void OnModelCreating(DbModelBuilder modelBuilder)
21        {
22            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());
23
24            base.OnModelCreating(modelBuilder);
25        }
26
27     }
28 }

生成数据库:

数据库的名字



你同样可以指定数据库的名字在base构造器中,例如:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data.Entity;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace EF1
 9 {
10    public class DbContextClass:DbContext
11     {
12        public DbContextClass()
13            : base("MYDBHAHA")
14        { }
15        public DbSet<Student> Studnets { get; set; }
16
17        public DbSet<Standard> Standards { get; set; }
18
19
20        protected override void OnModelCreating(DbModelBuilder modelBuilder)
21        {
22            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());
23
24            base.OnModelCreating(modelBuilder);
25        }
26
27     }
28 }

然后生成的数据库是:

连接字符串


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

namespace EF1
{
   public class DbContextClass:DbContext
    {
       public DbContextClass()
           : base("ConnectionString") //或者你也可以这样 : base("name=ConnectionString")
       { }
       public DbSet<Student> Studnets { get; set; }

       public DbSet<Standard> Standards { get; set; }

       protected override void OnModelCreating(DbModelBuilder modelBuilder)
       {
           Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DbContextClass>());

           base.OnModelCreating(modelBuilder);
       }

    }
}

然后在web.config中加入连接字符串:

1 <connectionStrings>
2     <add name="ConnectionString" connectionString="server=.;database=EFCodeFirstDB;uid=sa;pwd=Password_1" providerName="System.Data.SqlClient"/>
3 </connectionStrings>

运行程序,在数据库管理工具中就生成了我们想要的数据库:

就是这么多!

时间: 2024-08-10 23:28:45

DbContext 那些事 —— 数据库初始化的相关文章

Entity Framework数据库初始化四种策略

策略一:数据库不存在时重新创建数据库 复制内容到剪贴板 程序代码 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); 策略二:每次启动应用程序时创建数据库 复制内容到剪贴板 程序代码 Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>())

EntityFramework Code-First 简易教程(三)-------数据库初始化

现在我们来学习,当数据库初始化的时候,Code First怎样设置数据库的名字. 下面的图显示了数据库初始化的工作流程,根据传入给context基类的构造函数的参数来初始化: 根据上面的图,context基类的构造函数可以传入如下参数: 无参数 参数为数据库名称 参数为连接字符串 无参数的构造函数: 如果不传参数给context基类的构造函数,它就会在我们本地创建一个以{命名空间}.{Context类名}为名字的数据库.比如下面代码会创建一个名字为SchoolDataLayer.Context的

DB Initialization(数据库初始化)[EF Code-First系列]

前面的例子中,我们已经看到了Code-First自动为我们创建数据库的例子. 这里我们将要学习的是,当初始化的时候,Code-First是怎么决定数据库的名字和服务的呢??? 下面的图,解释了这一切!!! 这个图解释了,数据库初始化的流程,是基于我们在上下文类中的构造函数中传递的参数. 在上面的图中,context类中的base构造器中,可以填入下面的参数: 无参数(No Parameter) 数据库的名字(Database Name) 连接字符串的名字(Connection String Na

【译】第31节---数据库初始化策略

原文:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx 在第一次运行Code-First应用程序后已经创建了一个数据库,但是第二次启动时呢?每次运行应用程序时会创建一个新的数据库吗?生产环境怎么样?更改域模型时,如何更改数据库?要处理这些情况,必须使用一个数据库初始化策略. 有四种不同的数据库初始化策略: CreateDatabaseIfNot

Entity Framework 数据库初始化四种策略

策略一:数据库不存在时重新创建数据库 1 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); 策略二:每次启动应用程序时创建数据库 1 Database.SetInitializer<testContext>(new DropCreateDatabaseAlways<testContext>()); 策略三:模型更改时重新创建数据库 1 Dat

Code-First 数据库初始化策略

原文:http://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx 有四种不同的数据库初始化策略: CreateDatabaseIfNotExists:这是默认的初始值设定项.顾名思义,如果每个配置都不存在,它将创建数据库.但是,如果更改模型类,然后使用此初始化程序运行应用程序,则会引发异常. DropCreateDatabaseIfModelChange

SQL Server 数据库初始化准备脚本

通常我们在项目部署前都会写一份数据库初始化脚本.由于数据库外键的限制,我们需要按照数据引用顺序添加初始记录,这个整理过程相当麻烦. 因此写了以下脚本,原理是先去掉所有外键,然后执行一次清空,然后添加数据,最后恢复外键. 网上也有暂时禁用外键添加数据的方法,但由于SQL Server在有外键的情况下,不能使用TRUNCATE TABLE语句,因此暂时禁用外键时,只能使用DELETE语句清除无用数据.如果觉得删除外键不安全,也可以考虑将以下脚本修改为禁用外键的方式运行. 脚本在 SQL Server

EF CodeFirst简介、默认约定、数据库初始化策略

CodeFirst 工作流程 创建或修改领域类-->使用数据注解或者Fluent API来配置领域类-->使用自动数据库迁移技术或者基于代码的数据库迁移技术来创建数据库. CodeFirst默认约定 约定就是一系列的默认规则,通过这些规则,在使用EF Code-First的时候,可以自动的基于你的领域类配置概念模型.默认约定的命名空间:System.Data.Entity.ModelConfiguration.Conventions; ①schema(模式)  默认情况下,EF会为所有的数据库

Entity Framework(code first)数据库初始化

//1.修改模型,重设数据库 using System.Data.Entity; Database.SetInitializer<LisknoveDataContext>(newDropCreateDatabaseIfModelChanges<LisknoveDataContext>()); //2.修改模型,重设数据库,并初始化数据 using System.Data.Entity; public class LisknoveInitializer:DropCreateDatab