7

最近、ServiceStack とその ORMLite フレームワークを使い始めました。Google で検索してソース コードを参照しましたが、関連するものは見つかりませんでした。

ORMLite でクエリを実行するときに特定の列を選択する方法はありますか? そんな感じ :Db.First<Model>(q => q.Id == someId, "Column1, Column2")

私がこの機能を見逃していない限り、これは DB トランザクションを最適化するための経験則の 1 つであるため、これまで誰も質問しなかったことに驚いています。

4

4 に答える 4

7

テーブル以外の列を指定する場合は、この前の例で見たようにSQL を使用する必要があります

したがって、あなたの場合、次のようなことができます:

Db.First<Model>("SELECT Column1, Column2 FROM AnyTableOrView");

[Alias]次のように属性で装飾することにより、テーブルを参照する部分モデルを作成することもできます。

[Alias("AnyTableOrView")]
public class Model {
    public int Id { get; set; }
    public string Column1 { get; set; }
    public string Column2 { get; set; }
}

次に、次のようなことができます。

Db.First<Model>(q => q.Id == someId);

そして、部分モデルからフィールドを選択して入力するだけです。

于 2012-10-02T19:38:16.597 に答える
2

私はこれを試しました:

  1. データベース VIEW を作成しました (テーブル名と列は既に設定されています)
  2. 「イベント」という名前のクラスを作成し、そのテーブルの各フィールドをプロパティと一致させます(テーブル名とすべての列に[エイリアス]を使用して、素敵な名前を付けました)
  3. ID に基づいて 1 つのレコードを選択するための DB への書き込みアクセス

        var dbFactory = new OrmLiteConnectionFactory(
            "Data Source=MyDB;User Id=user;Password=pwd",  // Connection String
            OracleDialect.Provider);
    
        using (var db = dbFactory.OpenDbConnection())
        {
                var event = db.GetByIdOrDefault<Event>( request.Id );
        }
    

その時点で var 'event' が入力されますが、Id フィールドのみが入力されます。クラスの他のすべてのフィールドは入力されていません (実際にはデータベースにデータがあります)。

それは私ができる最も簡単なことですが、うまくいきません。何か案は ?(PS : OrmLite for Oracle を使用しています)

ありがとう

于 2013-01-03T15:07:12.163 に答える
1

私は同様の問題を抱えていましたが、私の解決策は異なっていました。

POCO に int プロパティがありました。私のクエリ (Oracle から) は、このプロパティに対して null を返していました。これにより例外が発生し、その行のそれ以上の処理が妨げられました。その結果、部分的に実装された POCO が作成されました。

解決策は、タイプを null 許容に変更することでした。

public int? mypropperty
于 2013-02-07T17:19:22.573 に答える