原文:http://www.entityframeworktutorial.net/code-first/database-initialization-in-code-first.aspx
本节,我们将学习Code First在初始化数据库时如何决定数据库名称和服务器。
下图显示了一个数据库初始化工作流程,基于从DbContext派生的上下文类的基础构造函数中传递的参数:
根据上图,上下文类的基础构造函数可以具有以下参数:
- 无参数
- 数据库名称
- 连接字符串名称
无参数
如果不在上下文类的基本构造函数中指定参数,那么在本地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使用基础构造函数初始化数据库。