EF Code First学习笔记:数据库创建(转载修改)
2015-08-15 22:18
591 查看
自定义数据库链接字符串
控制数据库的位置
默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayContext。
有几种方法可以改变这种默认约定。
利用配置文件
在配置文件中新加一个连接字符串
备注
注意这里连接字符串名称和我们的context类名相同,都为BreakAwayContext。我们修改了一下默认的数据库名,将BreakAway.BreakAwayContext
改为BreakAwayConfigFile。
我们在新增一个连接字符串
具体的连接字符串请按上面方法进行修改
新建的连接串名称和context类名不同了,所以我们要在BreakAwayContext的构造函数中指名连接串的名称:
复制代码
public class BreakAwayContext : DbContext
{
public BreakAwayContext():
base(“name=My_Test”)
{
}
}
复制代码
利用DbConnection
DbContext有一个带DbConnection重载的构造函数,说明我们也可以通过DbConnection来定位数据库位置。我们也要先修改BreakAwayContext的构造函数:
调用:
复制代码
static void Main(string[] args)
{
try
{
var lodging = new Lodging
{
Name = “Rainy Day Motel”,
};
复制代码
使用连接工厂控制数据库位置
Code First的默认连接工厂是SqlConnectionFactory。此连接工厂将使用SQL Client(System.Data.SqlClient的)数据库引擎连接到数据库。默认的行为,将选择在localhost\ SQLEXPRESS创建数据库,并使用上下文类型的完全限定名作为数据库的名称。
我们可以通过指定的连接字符串段,来覆写默认规则。
复制代码
static void Main(string[] args)
{
try
{
Database.DefaultConnectionFactory = new SqlConnectionFactory(@”Server=.;Trusted_Connection=true”);
using (var context = new BreakAwayContext())
{
context.Database.Initialize(true);
context.SaveChanges();
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
Console.WriteLine( ” 保存失败”);
}
Console.WriteLine(“OK”);
Console.Read();
}
复制代码
PS:用这个方法好像没办法指定数据库名,默认名称为context类的完全限定名。
数据库初始化
初始化包括两个主要步骤。首先,使用Code First在内存中根据默认规则和配置创建模型。其次,使用已设置的数据库初始化器将用于存储数据的数据库初始化。
初始化是延迟加载的,所以创建一个实例的是不完全满足初始化发生的条件的。必须执行对模型的操作,如查询或添加实体才会发生。
但我们可以可以调用DbContext.Database.Initialize方法,在没有对模型执行任何操作的时候强制初始化。
在数据库初始化产生时进行控制
有三个方法可以控制数据库初始化时的行为。
1 CreateDatabaseIfNotExists
CreateDatabaseIfNotExists方法会在没有数据库时创建一个,这是默认行为。
2 DropCreateDatabaseIfModelChanges
如果我们在在模型改变时,自动重新创建一个新的数据库,就可以用这个方法。在这开发过程中非常有用。
3 DropCreateDatabaseAlways
如果你想在每次运行时都重新生成数据库就可以用这个方法。
文章转载自http://www.cnblogs.com/Gyoung/archive/2013/01/28/2876845.html
控制数据库的位置
默认情况下,数据库是创建在localhost\SQLEXPRESS服务器上,并且默认的数据库名为命名空间+context类名,例如我们前面的BreakAway.BreakAwayContext。
有几种方法可以改变这种默认约定。
利用配置文件
在配置文件中新加一个连接字符串
备注
[code]使用本例中的connectionString连接失败,具体的字符串可以通过如下方式获得:项目右键->添加->新建项![这里写图片描述](http://img.blog.csdn.net/20150815213213853) ![这里写图片描述](http://img.blog.csdn.net/20150815213343078) ![这里写图片描述](http://img.blog.csdn.net/20150815213416777) ![这里写图片描述](http://img.blog.csdn.net/20150815221522846) ![这里写图片描述](http://img.blog.csdn.net/20150815221702811)
注意这里连接字符串名称和我们的context类名相同,都为BreakAwayContext。我们修改了一下默认的数据库名,将BreakAway.BreakAwayContext
改为BreakAwayConfigFile。
我们在新增一个连接字符串
具体的连接字符串请按上面方法进行修改
新建的连接串名称和context类名不同了,所以我们要在BreakAwayContext的构造函数中指名连接串的名称:
复制代码
public class BreakAwayContext : DbContext
{
public BreakAwayContext():
base(“name=My_Test”)
{
}
}
复制代码
利用DbConnection
DbContext有一个带DbConnection重载的构造函数,说明我们也可以通过DbConnection来定位数据库位置。我们也要先修改BreakAwayContext的构造函数:
[code] public BreakAwayContext(DbConnection connection) : base(connection, contextOwnsConnection: false) { }
调用:
复制代码
static void Main(string[] args)
{
try
{
var lodging = new Lodging
{
Name = “Rainy Day Motel”,
};
[code] var resort = new Resort { Name = "Top Notch Resort and Spa", MilesFromNearestAirport = 30, Activities = "Spa, Hiking, Skiing, Ballooning", }; var cstr = @"Server=.\SQLEXPRESS; Database=BreakAwayDbConnectionConstructor;Trusted_Connection=true"; using (var connection = new SqlConnection(cstr)) { using (var context = new BreakAwayContext(connection)) { context.Lodgings.Add(lodging); context.SaveChanges(); } } } catch (System.Data.Entity.Validation.DbEntityValidationException ex) { Console.WriteLine( " 保存失败"); } Console.WriteLine("OK"); Console.Read(); }
复制代码
使用连接工厂控制数据库位置
Code First的默认连接工厂是SqlConnectionFactory。此连接工厂将使用SQL Client(System.Data.SqlClient的)数据库引擎连接到数据库。默认的行为,将选择在localhost\ SQLEXPRESS创建数据库,并使用上下文类型的完全限定名作为数据库的名称。
我们可以通过指定的连接字符串段,来覆写默认规则。
复制代码
static void Main(string[] args)
{
try
{
Database.DefaultConnectionFactory = new SqlConnectionFactory(@”Server=.;Trusted_Connection=true”);
using (var context = new BreakAwayContext())
{
context.Database.Initialize(true);
context.SaveChanges();
}
}
catch (System.Data.Entity.Validation.DbEntityValidationException ex)
{
Console.WriteLine( ” 保存失败”);
}
Console.WriteLine(“OK”);
Console.Read();
}
复制代码
PS:用这个方法好像没办法指定数据库名,默认名称为context类的完全限定名。
数据库初始化
初始化包括两个主要步骤。首先,使用Code First在内存中根据默认规则和配置创建模型。其次,使用已设置的数据库初始化器将用于存储数据的数据库初始化。
初始化是延迟加载的,所以创建一个实例的是不完全满足初始化发生的条件的。必须执行对模型的操作,如查询或添加实体才会发生。
但我们可以可以调用DbContext.Database.Initialize方法,在没有对模型执行任何操作的时候强制初始化。
[code] using (var context = new BreakAwayContext()) { context.Database.Initialize(true); }
在数据库初始化产生时进行控制
有三个方法可以控制数据库初始化时的行为。
1 CreateDatabaseIfNotExists
CreateDatabaseIfNotExists方法会在没有数据库时创建一个,这是默认行为。
[code] Database.SetInitializer( new CreateDatabaseIfNotExists<BreakAwayContext>()); using (var context = new BreakAwayContext()) { context.Database.Initialize(true); }
2 DropCreateDatabaseIfModelChanges
如果我们在在模型改变时,自动重新创建一个新的数据库,就可以用这个方法。在这开发过程中非常有用。
[code] Database.SetInitializer( new DropCreateDatabaseIfModelChanges<BreakAwayContext>()); using (var context = new BreakAwayContext()) { context.Database.Initialize(true); }
3 DropCreateDatabaseAlways
如果你想在每次运行时都重新生成数据库就可以用这个方法。
[code] Database.SetInitializer( new DropCreateDatabaseAlways<BreakAwayContext>()); using (var context = new BreakAwayContext()) { context.Database.Initialize(true); }
文章转载自http://www.cnblogs.com/Gyoung/archive/2013/01/28/2876845.html
相关文章推荐
- oracle中动态SQL使用详细介绍
- 五、MongoDB的索引
- Redis学习笔记(1)
- 在SQL Server中创建用户角色及授权(使用SQL语句)
- mongodb的java命令
- Oracle中dual表的用途介绍
- 数据库系列学习(十)-约束
- 查看当前数据库正在运行的Session
- 查看Oracle中是否有锁表的sql
- 页面化操作数据库
- MongoDB Helper的简单封装
- MongoDB的一些基本操作
- mysql 启动错误
- Oracle数据库基础
- oracle锁表解除
- MySQL与Oracle的语法区别详细对比
- 视图、存储过程
- Oracle数据库表被锁
- xorm使用pgsql的例子
- 【学习笔记】C++操作redis库