「NServiceKit OrmLite/基本的な使い方」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「まずは以下を熟読すべし。基本的な使い方は以下に書かれている。ここではそれに対する補足などを記載する。 *https://github.com...」) |
|||
(他の1人の利用者による、間の3版が非表示) | |||
4行目: | 4行目: | ||
==注意== | ==注意== | ||
これは[[ServiceStack OrmLite]]ではなく[[NServiceKit OrmLite]]のお話です。 | これは[[ServiceStack OrmLite]]ではなく[[NServiceKit OrmLite]]のお話です。 | ||
+ | |||
+ | ==SELECT== | ||
+ | ===一般的なSELECT=== | ||
+ | [[英語]]が読めなくても見ればわかる。 | ||
+ | *https://github.com/NServiceKit/NServiceKit.OrmLite/blob/master/README.md | ||
+ | |||
+ | ===SqlExpressionVisitor<T>クラスを用いる=== | ||
+ | OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。 | ||
+ | |||
+ | ただSELECTメソッドは[[遅延評価]]ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。 | ||
+ | |||
+ | そのような用途のためにSqlExpressionVisitor<T>クラスが用意されている。 | ||
+ | SqlExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。 | ||
+ | |||
+ | SqlExpressionVisitorが吐き出すSQL文はデータベースに依存するため、事前にOrmLiteConfig.DialectProviderを適切に設定したうえで、ExpressionVisitor<T>()メソッドでインスタンスを取得するようになっている。 | ||
+ | |||
+ | なお、一部のデータベースではSqlExpressionVisitorの派生クラスが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえずMySQLのものはそこそこ動くようだ。 | ||
+ | |||
+ | <source lang="csharp"> | ||
+ | OrmLiteConfig.DialectProvider = MySqlDialectProvider.Instance; | ||
+ | |||
+ | var cs = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString; | ||
+ | var db = cs.OpenDbConnection(); | ||
+ | |||
+ | db.CreateTable<User>(overwrite: true); | ||
+ | db.Insert<User>(new User { Id = 1, Name = "上級国民", }); | ||
+ | db.Insert<User>(new User { Id = 2, Name = "一般国民", }); | ||
+ | db.Insert<User>(new User { Id = 3, Name = "その他", }); | ||
+ | |||
+ | var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<User>(); | ||
+ | ev.Where(x => x.Id == 2); | ||
+ | ev.Or(x => x.Id == 3); | ||
+ | |||
+ | var rows = db.Select(ev); | ||
+ | </source> | ||
==関連項目== | ==関連項目== | ||
13行目: | 48行目: | ||
{{stub}} | {{stub}} | ||
+ | |||
+ | [[category:NServiceKit]] |
2015年10月19日 (月) 20:16時点における最新版
まずは以下を熟読すべし。基本的な使い方は以下に書かれている。ここではそれに対する補足などを記載する。
注意[編集 | ソースを編集]
これはServiceStack OrmLiteではなくNServiceKit OrmLiteのお話です。
SELECT[編集 | ソースを編集]
一般的なSELECT[編集 | ソースを編集]
英語が読めなくても見ればわかる。
SqlExpressionVisitor<T>クラスを用いる[編集 | ソースを編集]
OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。
ただSELECTメソッドは遅延評価ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。
そのような用途のためにSqlExpressionVisitor<T>クラスが用意されている。 SqlExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。
SqlExpressionVisitorが吐き出すSQL文はデータベースに依存するため、事前にOrmLiteConfig.DialectProviderを適切に設定したうえで、ExpressionVisitor<T>()メソッドでインスタンスを取得するようになっている。
なお、一部のデータベースではSqlExpressionVisitorの派生クラスが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえずMySQLのものはそこそこ動くようだ。
OrmLiteConfig.DialectProvider = MySqlDialectProvider.Instance;
var cs = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
var db = cs.OpenDbConnection();
db.CreateTable<User>(overwrite: true);
db.Insert<User>(new User { Id = 1, Name = "上級国民", });
db.Insert<User>(new User { Id = 2, Name = "一般国民", });
db.Insert<User>(new User { Id = 3, Name = "その他", });
var ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<User>();
ev.Where(x => x.Id == 2);
ev.Or(x => x.Id == 3);
var rows = db.Select(ev);