ServiceStack.OrmLiteノート2-増

2772 ワード

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 AuditTable:IAudit{public AuditTable(){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 Table WithSeedData(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(runSqlBeforeTable Created)][PostCreateTable(runSqlAfterTable Created)][preDropTable(runSqlBeforeTable Dropped)][PostDropTable(runSqlAfterTable Dropped)]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文を直接実行する