创建表

前一篇忘记写创建表了,这里补上。(其实前一篇也有那么一点)

建议安装源码里的t4模板看看效果先。

public 的属性才有效

在表被创建或者删除的时候执行sql语句

[PostCreateTable("INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" +

"INSERT INTO TableWithSeedData (Name) VALUES ('Bar');")]

public class TableWithSeedData

{

[AutoIncrement]

public int Id { get; set; }

public string Name { get; set; }

}

typeof(TableWithSeedData)

.AddAttributes(new PostCreateTableAttribute(

"INSERT INTO TableWithSeedData (Name) VALUES ('Foo');" +

"INSERT INTO TableWithSeedData (Name) VALUES ('Bar');"));

前戏和事后,都是可以有自己的玩法

[PreCreateTable(runSqlBeforeTableCreated)][PostCreateTable(runSqlAfterTableCreated)]

[PreDropTable(runSqlBeforeTableDropped)][PostDropTable(runSqlAfterTableDropped)]

public class Table {}

public class PocoTable

{

public int Id { get; set; }

[CustomField("CHAR(20)")] //这里是数据库的类型的字段的验证,和fluentvalidation 不太一样,fluentvalidation更多是对类的字段验证。 这里的 [CustomField("CHAR(20)")]是和ef差不多,是指和数据库的映射
public string CharColumn { get; set; } [CustomField("DECIMAL(18,4)")]
public decimal? DecimalColumn { get; set; }

}

db.CreateTable();

生成sql:

CREATE TABLE "PocoTable"

(

"Id" INTEGER PRIMARY KEY,

"CharColumn" CHAR(20) NULL,

"DecimalColumn" DECIMAL(18,4) NULL

);

//外键和引用 建议自己建几个表,亲手撸一下。av看再多,不如约个来一发

public class TableWithAllCascadeOptions

{

[AutoIncrement] public int Id { get; set; }

[References(typeof(ForeignKeyTable1))]
public int SimpleForeignKey { get; set; } [ForeignKey(typeof(ForeignKeyTable2), OnDelete = "CASCADE", OnUpdate = "CASCADE")]
public int? CascadeOnUpdateOrDelete { get; set; } [ForeignKey(typeof(ForeignKeyTable3), OnDelete = "NO ACTION")]
public int? NoActionOnCascade { get; set; } [Default(typeof(int), "17")] //默认值
[ForeignKey(typeof(ForeignKeyTable4), OnDelete = "SET DEFAULT")]
public int SetToDefaultValueOnDelete { get; set; } [ForeignKey(typeof(ForeignKeyTable5), OnDelete = "SET NULL")]
public int? SetToNullOnDelete { get; set; }

}

db.DropAndCreateTable();//删除然后添加表

dbFactory.Run(db => db.CreateTable(overwrite:false));//不解释 看姿势

db.CreateTable(true);// overwrite 直给

//批量添加 用事务

db.DropAndCreateTable();

var rows = "A,B,B,C,C,C,D,D,E".Split(',').Map(x => new LetterFrequency { Letter = x });

db.InsertAll(rows);

实现在这里

internal static void InsertAll(this IDbCommand dbCmd, IEnumerable objs)

{

IDbTransaction dbTrans = null;

        try
{
if (dbCmd.Transaction == null)
dbCmd.Transaction = dbTrans = dbCmd.Connection.BeginTransaction(); var dialectProvider = dbCmd.GetDialectProvider(); dialectProvider.PrepareParameterizedInsertStatement<T>(dbCmd); foreach (var obj in objs)
{
if (OrmLiteConfig.InsertFilter != null)
OrmLiteConfig.InsertFilter(dbCmd, obj); dialectProvider.SetParameterValues<T>(dbCmd, obj); try
{
dbCmd.ExecNonQuery();
}
catch (Exception ex)
{
Log.Error("SQL ERROR: {0}".Fmt(dbCmd.GetLastSqlAndParams()), ex);
throw;
}
} if (dbTrans != null)
dbTrans.Commit();
}
finally
{
if (dbTrans != null)
dbTrans.Dispose();
}
}

ServiceStack.OrmLite 学习笔记3 建表的更多相关文章

  1. ServiceStack.OrmLite 学习笔记7-复杂点的使用1

    复杂点的使用1 先看看这2个类 class Customer { public int Id { get; set; } ... } class CustomerAddress { public in ...

  2. Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法

    Ext JS4 学习笔记之发送表单(Form)时也将表单下的表格(Grid)数据一同发送的方法 昨天在开发的时候遇到个小问题,就是如何将Grid的内容与Form一起发送到服务器端.默认情况下,表单(F ...

  3. Go学习笔记06-内建容器

    Go学习笔记06-内建容器 Go语言 数组 *切片(Slice) #F44336 Slice的操作 Map map示例 字符处理 数组 定义数组: //这样定义数组编译器自动初始化每个元素为0  va ...

  4. Hibernate学习(三)自动建表

    一般情况下有如下两种方法: 1.在配置文件中添加如下配置 <property name="hibernate.hbm2ddl.auto">create</prop ...

  5. MySql cmd下的学习笔记 —— 有关建立表的操作(有关于数据类型)

    (01)建表的过程实际上是 声明字段 的过程 一. 列类型(字段): 存储同样的数据时,不同的列类型,所占据的空间和效率是不一样的,这就是建表时要考虑的意义. 二.MySQL三大列类型     数值型 ...

  6. C语言数据结构基础学习笔记——基础线性表

    线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...

  7. python3学习笔记(7)_listComprehensions-列表生成式

    #python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...

  8. 【SwiftUI】学习笔记1-创建第一个iOS应用

    本系列将会开发大量实际的项目. 系列为本人学习笔记,资料:<SwiftUI自学成长笔记>-刘铭 资源源代码下载资源:可以在gitee上下载,搜索刘铭即可. 第一章:创建项目 也可以在菜单栏 ...

  9. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

随机推荐

  1. Elasticsearch DSL语句之连接查询

    传统数据库支持的full join(全连接)查询方式. 这种方式在Elasticsearch中使用时非常昂贵的.因此,Elasticsearch提供两种操作可以支持水平扩展 更多内容请参考Elasti ...

  2. 对比其它软件方法评估敏捷和Scrum

    一般来说,选择一种软件开发方法,更像是加入一个邪教组织,而不像是做出了一个技术决策.许多公司甚至从未试图去评估这些方法,而仅仅是盲目采用最流行的方法,这就造成了如今五花八门的各种敏捷方法.因此本文将使 ...

  3. Backup: Flow Control in Perl6

    Control Flow 注意空格,注意空格,注意空格 和 Perl5不同的是,这些结构都可以返回值,而且即使倒置结构也可以用 block 了 block 可以有逗号 with without orw ...

  4. 5.24 Declaring Attributes of Functions【转】

    转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes o ...

  5. Hibernate,JPA注解@OneToOne_JoinColumn

    一对一(One-to-one),外键关联 用例代码如下: 数据库DDL语句 1,CAT表 create table CAT ( id CHAR) not null, create_time ), up ...

  6. MySQL之对数据库库表的字符集的更改

    数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablen ...

  7. 删除 SQL Server 2005 Express 工具

    安装sql server 2008 management,提示错误:Sql2005SsmsExpressFacet 检查是否安装了 SQL Server 2005 Express 工具. 失败,已安装 ...

  8. Asp.net Vnext IValueProvider

    概述 本文已经同步到<Asp.net Vnext 系列教程 >中] IValueProvider 根据ValueProvider获取数据,在对数据进行绑定 代码实现 private cla ...

  9. Apache2.2 + php-5.4.45-Win32-VC9-x86 配置

    首先要注意一个问题是:网上有很多教程比如: 在Apache配置文件中添加php模块.在apache2\conf\httpd.conf中: LoadModule模块添加行: LoadModule php ...

  10. maven 手动安装jar到仓库的命令

    mvn install:install-file -DgroupId=com.sun -DartifactId=tools -Dversion=1.6.0 -Dpackaging=jar -Dfile ...