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. 视频处理控件TVideoGrabber如何重新编码视频/音频(2)

    在前面的文中<视频处理控件TVideoGrabber如何重新编码视频>已经讲解了部分TVideoGrabber重新编码音频.视频剪辑的内容,下面将继续说明. 重新编码进程 重新编码开始时, ...

  2. svn权限控制

    http://blog.csdn.net/clever101/article/details/8159105 [groups] #核心层开发组成员 core_dev = lg,zjc #扩展层开发组成 ...

  3. Linux和Windows远程桌面互连

    1.Ubuntu 连 windows    W.1 Windows设置允许远程桌面连接    U.1 Ubuntu设置 apt-get install rdesktop    U.2 Ubuntu连接 ...

  4. 理解逐次逼近寄存器型ADC:与其它类型ADC的架构对比【转】

    转自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=86760 摘要:逐次逼近寄存器型(SAR)模数转换器(ADC)占据着大部分的中等至高分辨 ...

  5. Java 使用 Redis | 菜鸟教程

    入门教程: http://www.runoob.com/redis/redis-java.html 中文手册: http://redis.readthedocs.io/en/2.4/index.htm ...

  6. JavaEE基础(二十五)/多线程、GUI

    1.多线程(单例设计模式) 单例设计模式:保证类在内存中只有一个对象. 如何保证类在内存中只有一个对象呢? (1)控制类的创建,不让其他类来创建本类的对象.private (2)在本类中定义一个本类的 ...

  7. iOS 判断相机权限是否被限制,判断相机是否可以使用

    判断相机权限是否被限制 需要导入   AVFoundation 类 [objc] view plain copy #import <AVFoundation/AVFoundation.h> ...

  8. 如何查看Python的内置函数

    经常调用的时候不知道python当前版本的内置函数是哪些,可以用下面的指令查看: C:\Users\Administrator>python Python 2.7.11 (v2.7.11:6d1 ...

  9. Browser对象

    Window对象即浏览器中打开的窗口,当文档里面有框架(frame或者iframe标签)时,浏览器会为HTML文档创建一个window对象,并为每个框架创建一个额外的window对象. 属性close ...

  10. 默认调用电脑IE版本最高版本

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />