「NServiceKit OrmLite/基本的な使い方」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
(他の1人の利用者による、間の2版が非表示)
6行目: 6行目:
  
 
==SELECT==
 
==SELECT==
===ExpressionVisitor<T>===
+
===一般的なSELECT===
 +
[[英語]]が読めなくても見ればわかる。
 +
*https://github.com/NServiceKit/NServiceKit.OrmLite/blob/master/README.md
 +
 
 +
===SqlExpressionVisitor<T>クラスを用いる===
 
OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。
 
OrmLiteのSELECTメソッドはWHERE句に相当する。中身はLINQでも直書きSQLでも受け付ける。
  
 
ただSELECTメソッドは[[遅延評価]]ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。
 
ただSELECTメソッドは[[遅延評価]]ではなく、いきなり実行される。このためLINQを使った場合は、複数の条件式を徐々に組み立てたり、ORDER BY句によるソートなども一切出来ない。これでは使い物にならない。
  
そのような用途のためにOrmLiteConfig.DialectProvider.ExpressionVisitor<T>が用意されている。
+
そのような用途のためにSqlExpressionVisitor<T>クラスが用意されている。
ExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。
+
SqlExpressionVisitorを用いてクエリを組み立て、最後にSELECTメソッドに食わせてやるという、いわゆるSqlBuilderである。
  
ExpressionVisitorが吐き出すSQL文はデータベースに依存するためOrmLiteConfig.DialectProviderから生成するようになっている。一部のデータベースではExpressionVisitorが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえずMySQLのものはそこそこ動くようだ。
+
SqlExpressionVisitorが吐き出すSQL文はデータベースに依存するため、事前にOrmLiteConfig.DialectProviderを適切に設定したうえで、ExpressionVisitor<T>()メソッドでインスタンスを取得するようになっている。
 +
 
 +
なお、一部のデータベースではSqlExpressionVisitorの派生クラスが完璧に実装されていない開発途上のものも存在するので注意を要する。とりあえずMySQLのものはそこそこ動くようだ。
  
 
<source lang="csharp">
 
<source lang="csharp">
42行目: 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);

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]