ServiceStack.OrmLite 笔记2

这篇主要介绍 增加

db.Insert(new Employee { Id = 1, Name = "Employee 1" }); //默认同步

await db.InsertAsync(new Employee { Id = 1, Name = "Employee 1" }); //异步 其他的异步类似这里的这个示例

db.InsertOnly(new Person { FirstName = "Amy" }, q => q.Insert(p => new {p.FirstName}))

// 插入部分字段 后面的参数q.Insert表示要插入的字段 生成sql: INSERT INTO "Person" ("FirstName") VALUES ('Amy')

var rowId = db.Insert(new Poco { Text = "Text" }, selectIdentity:true);// selectIdentity:true返回自增长的id

这里代码有点多 全局的插入时过滤 类似的有UpdateFilter ,感觉就是插入时对数据进行拦截,可以发挥你的想象,比如可以在这里加日志,或者扩展新的字段,做爱做的事情。

public interface IAudit

{

DateTime CreatedDate { get; set; }

DateTime ModifiedDate { get; set; }

string ModifiedBy { get; set; }

}

//表对应的类

public class AuditTableA : IAudit

{

public AuditTableA()

{

this.CreatedDate = this.ModifiedDate = DateTime.UtcNow;

}

    [AutoIncrement]
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
public string ModifiedBy { get; set; }
}

OrmLiteConfig.InsertFilter = (dbCmd, row) => {

var auditRow = row as IAudit;

if (auditRow != null)

auditRow.CreatedDate = auditRow.ModifiedDate = DateTime.UtcNow;

};

下面是上面方法的新体位,也来自官网。对数据进行验证

OrmLiteConfig.InsertFilter = OrmLiteConfig.UpdateFilter = (dbCmd, row) => {

var auditRow = row as IAudit;

if (auditRow != null && auditRow.ModifiedBy == null)

throw new ArgumentNullException("ModifiedBy");

};

try

{

db.Insert(new AuditTable());

}

catch (ArgumentNullException) {

//throws ArgumentNullException

}

db.Insert(new AuditTable { ModifiedBy = "Me!" }); //succeeds

下面的代码因为也有insert 就也放上吧

在表被创建或者删除的时候执行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 {}

Db.ExecuteSql("INSERT INTO page_stats (ref_id, fav_count) VALUES (@refId, @favCount)", new { refId, favCount }) //直接执行sql语句

Db.ExecuteSqlAsync("UPDATE page_stats SET view_count = view_count + 1 WHERE id = @id", new { id })//直接执行sql语句

ServiceStack.OrmLite 笔记2 -增的更多相关文章

  1. ServiceStack.OrmLite 笔记

    ServiceStack.OrmLite 笔记1 ServiceStack.OrmLite 这个东东就是个orm框架,可以实现类似ef的效果.具体的就不这里班门弄斧了. 支持 SqlServerDia ...

  2. ServiceStack.OrmLite 笔记9 -code first 必须的代码优先

    复杂点的使用3 code first的使用,支持复杂类型 public enum PhoneType { Home, Work, Mobile, } public enum AddressType { ...

  3. ServiceStack.OrmLite 笔记8 -还是有用的姿势

    复杂点的使用2 InsertAll, UpdateAll and DeleteAll 的参数要是IEnumerables Each关键字 返回 IEnumerable 并且是延迟加载的 全局设置 当字 ...

  4. ServiceStack.OrmLite 笔记10-group having 分页orderby等

    group having 分页等 var ev = OrmLiteConfig.DialectProvider.SqlExpression(); group的使用 同sql一样,注意group分组的字 ...

  5. ServiceStack.OrmLite 笔记5 改

    修改 db.Update(new Person { Id = 1, FirstName = "Jimi", LastName = "Hendrix", Age ...

  6. ServiceStack.OrmLite 笔记4 删

    删除 db.DeleteAll(); //各种姿势 db.Delete(p => p.Age == 27);// db.Delete(q => q.Where(p => p.Age ...

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

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

  8. ServiceStack.OrmLite中的一些"陷阱"(2)

    注:此系列不是说ServiceStack.OrmLite的多个陷阱,这仅仅个人认为是某一个陷阱(毕竟我踩坑了)而引发的思考. 前文说到了项目需要使用两种不同的数据库语言,虽说前文问题已基本解决了,但是 ...

  9. ServiceStack.OrmLite中的一些"陷阱"(1)

    使用过ServiceStack.Ormlite的人都应该知道,其作为一个轻量级的ORM,使用的便捷度非常高,用起来就一个字:爽!而支撑其便捷度的,是库内大量地使用了扩展方法及静态变量. 首先先从源头入 ...

随机推荐

  1. :root

    概述 选择该文档的根元素. 在HTML中,文档的根元素,和$(":root")选择的元素一样, 永远是<html>元素. 示例 设置<html>背景颜色为黄 ...

  2. IMG图片和文字同行显示

    只要设定img标签的vertical-align CSS属性就好了,代码如下: <img src="images/untitled.png" style="widt ...

  3. drupal 自定义表单调用autocomplete主标签实现方法

    代码如下: <php function module_name_form() { $form = array(); $form['city'] = array( '#title' => t ...

  4. GCD 多线程 初探

    GCD编程的核心就是dispatch队列,dispatch block的执行最终都会放进某个队列中去进行,它类似NSOperationQueue但更复杂也更强大,并且可以嵌套使用.所以说,结合bloc ...

  5. 实现Ecshop商品跳到淘宝、京东等的购买链接

    今天简单的实现了一下ecshop商品导出到第三方的购买链接功能.大致思路是给商品添加一个buy_link的text字段,存为json结构,然后通过json解析输出到商品购买页面 1.添加字段 增加购买 ...

  6. 【转】Eclipse插件大全介绍及下载地址

    转载地址:http://developer.51cto.com/art/200906/127169.htm 尚未一一验证. eclipse插件大全介绍,以及下载地址 Eclipse及其插件下载网址大全 ...

  7. java环境log4j日志环境的配置。

    首先需要4个jar包.下载地址如下 http://pan.baidu.com/s/1i4k3fiH 期中包含如下包,放到工程的lib中即可.     除此之外还需要一个配置文件,分享链接如下. htt ...

  8. ASp.net 注册

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs ...

  9. IIS装好后,局域网不能访问

    IIS默认安装完成后,可以通过http:\\localhost或http:\\127.0.0.1或者http:\\ip地址访问,但是局域网内却不能通过IP来访问,通常只需要将防火墙关掉就好了,也在在防 ...

  10. 中国行政区域(省,市,县)SQL

    数据库:Region CREATE DATABASE [Region] 表:Province CREATE TABLE [dbo].[Province](     [Id] [int] NOT NUL ...