Castle ActiveRecord学习实践(10) 深度分析Schema Pitfals

摘要:写这篇文章缘于昨天跟Linkin的一段聊天。我在使用ActiveRecord的一些技巧一文中的由实体类生成数据库表提到了这样一句话:生成数据库表时只有当该表不存在时ActiveRecord才会生成,否则表如果存在ActiveRecord不会做任何事情,也不会报任何错误。Linkin说他在实验时如果数据库表存在,ActiveRecord会删除表中的记录,其实这句话是在有些情况下是不对的,本篇文章将详细介绍Castle ActiveRecord中的Schema Pitfals。

主要内容

1.引言

2.CreateSchema和DropSchema

3.CreateSchemaFromFile

4.GenerateCreationScripts和GenerateDropScripts

一.引言

我在Castle ActiveRecord学习实践(9):使用ActiveRecord的一些技巧一文中的由实体类生成数据库表提到了这样一句话:生成数据库表时只有当该表不存在时ActiveRecord才会生成,否则表如果存在ActiveRecord不会做任何事情,也不会报任何错误。Linkin说他在实验时如果数据库表存在,ActiveRecord会删除表中的记录,其实那句话是在有些情况下是不对的,通过后面的分析我们会看到。

Castle ActiveRecord为我们提供了由实体类生成数据库表的方法,它其实在底层是封装了NHibernate.Tool.hbm2ddl中的SchemaExport,既创建数据库表的方法都是通过SchemaExport类来完成了,所有的这些方法都在ActiveRecordStarter中提供,列表如下:

方 法 示例
CreateSchema() ActiveRecordStarter.CreateSchema();
CreateSchemaFromFile() ActiveRecordStarter.CreateSchemaFromFile("blog.sql");
DropSchema () ActiveRecordStarter.DropSchema();
GenerateDropScripts() ActiveRecordStarter.GenerateDropScripts("blog.sql");
GenerateCreationScripts() ActiveRecordStarter.GenerateCreationScripts("blog.sql");

二.CreateSchema和DropSchema

CreateSchema根据实体类来生成数据库表,在调用ActiveRecordStarter.CreateSchema()之后,我们来看一下ActiveRecord中执行了什么操作:

public static void CreateSchema()
{
  CheckInitialized();
  foreach(Configuration config in ActiveRecordBase._holder.GetAllConfigurations())
  {
    SchemaExport export = CreateSchemaExport(config);
    try
    {
      export.Create( false, true );
    }
    catch(Exception ex)
    {
      throw new ActiveRecordException( "Could not create the schema", ex );
    }
  }
}

时间: 2024-08-03 16:04:35

Castle ActiveRecord学习实践(10) 深度分析Schema Pitfals的相关文章

Castle ActiveRecord学习实践(1) 快速入门指南

摘要:最近几天有时间看了一下Castle,原来它的功能是如此的强大,从数据访问框架到IOC容器,再到WEB框架,基本包括了整个开发过程中的所有东西,看来得好好学习研究一下了,并且打算把自己学习过程的一些东西记录下来.先从ActiveRecord开始吧,ActiveRecord提供的简洁的O/R映射给我留下了很深的印象,本文将通过一个简单对象的CRUD操作来带你快速走进Castle ActiveRecord. 主要内容 1.概述 2.准备相关的数据表 3.编写User实体类 4.构建配置信息 5.

Castle ActiveRecord学习实践(4) 实现One-Many关系的映射

主要内容 1.准备数据表结构 2.编写实体类并介绍HasMany和BlongsTo特性 3.构建配置信息 4.编写测试代码 一.准备数据表结构 在这个例子中,我们引入了两个对象Blog.Post,它们之间的关系是一对多,即一个Blog有多篇Post.需要用到的数据表结构如下 CREATE TABLE Blogs ( blog_id int IDENTITY(1, 1) PRIMARY KEY, blog_name varchar(50), blog_author varchar(50) ) CR

Castle ActiveRecord学习实践(3) 映射基础

主要内容 简单映射 1.ActiveRecordAttribute 2. PrimaryKeyAttribute 3.CompositeKeyAttribute 4.PropertyAttribute 5.FieldAttribute 一.ActiveRecordAttribute 每一个实体类都必须继承于基类ActiveRecordBase,并在实体类上设置特性ActiveRecordAttribute,示例代码 //指定数据库表名 [ActiveRecord("Blogs")] p

Castle ActiveRecord学习实践(9) 使用ActiveRecord的一些技巧

主要内容 1.由实体类生成数据表 2.运行存在的SQL脚本 3.使用空属类型 4.使用枚举类型的属性 5.使用NHibernate中的日志记录 一.由实体类生成数据表 在前面所用到的例子中我们都是先有数据表结构,然后才有实体类,然而这会让很多朋友认为ORM怎么变成了ROM了,其实这只是我们平时的一个开发时的习惯问题,ActiveRecord是支持先有实体类,再由实体类生成数据库表.只不过我们可以在开发中根据项目的实际情况在这两种之间选择.看下面的代码,要生成数据库表结构,在实体类中需要多提供一些

Castle ActiveRecord学习实践(8) 数据有效性的验证

主要内容 1.概述 2.使用Validation 3.如何扩展 4.深入分析验证 一.概述 在录入数据时,对数据有效性的验证是必不可少的,很多时候我们在UI层上就会做一层验证,但有时也需要在底层做一些必要的处理,这就要用到ActiveRecord中的数据有效性的验证.ActiveRecord为我们提供了如下几个验证: n ValidateEmail n ValidateIsUnique n ValidateRegExp n ValidateNotEmpty n ValidateConfirmat

Castle ActiveRecord学习实践(2) 构建配置信息

主要内容 1.需要配置什么 2.如何去配置 3.常见的配置示例 一.需要配置什么 在第一篇大家都已经看到了,其实我们的配置信息跟用NHibernate时的配置是一样的,这是因为ActiveRecord在底层封装了NHibernate.为了没有用过NHibernate的朋友,这里再把配置信息简单介绍一下. 1.配置NHibernate ADO.NET属性 属性名 说明 hibernate.connection.provider_class 定制IConnectionProvider的类型. 例如:

Castle ActiveRecord学习实践(7) 使用HQL查询

主要内容 1.HQL概述 2.SimpleQuery查询 3.ScalarQuery查询 4.自定义查询 5.使用CallBack 一.HQL简单介绍 HQL全名是Hibernate Query Language,它是一种完全面向对象的查询语言.先来看一下HQL最基本的一些用法 1.From子句 from Post 你也可以为Post起一个别名 from Post as post 或者省略as from Post post 2.Select 子句 select Name,Author from

Castle ActiveRecord学习实践(5) 实现Many–Many关系的映射

主要内容 1.准备数据库表 2.编写实体类 3.编写测试代码 一.准备数据库表 接着在上篇文章中的例子,为了实现多对多的关系,我们引入Community,即每个Blog可以属于多个社区,每个社区也可以有多个Blog. CREATE TABLE Blogs ( blog_id int IDENTITY(1, 1) PRIMARY KEY, blog_name varchar(50), blog_author varchar(50) ) CREATE TABLE Blog_Community ( b

《深度学习导论及案例分析》一第3章 受限玻耳兹曼机3.1 受限玻耳兹曼机的标准模型

第3章 受限玻耳兹曼机 受限玻耳兹曼机(Restricted Boltzmann Machines,RBM)是一种能够解释为随机神经网络的概率图模型,随着计算能力的增加和快速算法的发展已经广泛应用于解决相关的机器学习问题.由于受限玻耳兹曼机只具有两层结构,所以从严格意义上说并不是一种真正的深度学习模型.这种模型之所以受到关注,是因为它可以用作基本模块来构造自编码器.深层信念网络.深层玻耳兹曼机等许多其他深层学习模型.本章将从概率图模型的角度,分别讨论受限玻耳兹曼机的标准模型.学习算法.案例分析及