【译】第6节---数据库初始化

原文:http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx

本节,我们将学习Code First在初始化数据库时如何决定数据库名称和服务器。

下图显示了一个数据库初始化工作流程,基于从DbContext派生的上下文类的基础构造函数中传递的参数:

 

根据上图,上下文类的基础构造函数可以具有以下参数:

  1. 无参数
  2. 数据库名称
  3. 连接字符串名称

无参数

如果不在上下文类的基本构造函数中指定参数,那么在本地SQLEXPRESS服务器中创建一个名称与{Namespace} {Context class name}匹配的数据库。

例如,Code First将为以下上下文类创建一个名为SchoolDataLayer.Context的数据库:

namespace SchoolDataLayer
{
    public class Context: DbContext 
    {
        public Context(): base()
        {
            
        }
    }
}

数据库名称

你还可以将数据库名称指定为上下文类的基本构造函数中的参数。 如果指定数据库名称参数,则Code First将使用本地SQLEXPRESS数据库服务器中的基础构造函数中指定的名称创建数据库。

例如,Code First将为以下上下文类创建一个名为MySchoolDB的数据库:

namespace SchoolDataLayer
{
    public class Context: DbContext 
    {
        public Context(): base("MySchoolDB") 
        {
                   
        }
    }
}

连接字符串名称

你还可以在app.config或web.config中定义连接字符串,并在上下文类的基础构造函数中指定以“name =”开头的连接字符串名称。

考虑下面的例子,我们在基础构造函数中传递name = SchoolDBConnectionString参数:

namespace SchoolDataLayer
{
    public class Context: DbContext 
    {
        public SchoolDBContext() : base("name=SchoolDBConnectionString") 
        {
        }
    }
}

App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
      <add name="SchoolDBConnectionString" connectionString="Data Source=.;Initial Catalog=SchoolDB-ByConnectionString;Integrated Security=true" providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

在上述上下文类中,我们指定一个连接字符串名称作为参数。 请注意,连接字符串名称应以“name =”开头,否则会将其视为数据库名称。

app.config中的连接字符串中的数据库名称是SchoolDB-ByConnectionString。 Code-First将创建一个新的SchoolDB-ByConnectionString数据库,或者在本地SQL Server上使用现有的SchoolDB-ByConnectionString数据库。

确保在连接字符串中包含providerName =“System.Data.SqlClient”。

综上所述,Code-First使用基础构造函数初始化数据库。

原文地址:https://www.cnblogs.com/talentzemin/p/7111932.html