1

ServiceStack OrmLite (Oracle データベースを使用) を試しています。しかし、ハングするだけdb.Selectです..例外もスローしていません..ロードするデータが多すぎるかのようにハングします。

PC に最新のオラクル インスタント クライアント バージョン 12.1 をインストールしました。

これは私のOrmLiteコードです:

namespace ConsoleApplication1
{
    class Program
    {
            static void Main(string[] args) {
            string DbConnection = 
                "SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=9530))(CONNECT_DATA=(SERVICE_NAME=MYSID)));uid=myusername;pwd=mypassword";

            var dbFactory = new OrmLiteConnectionFactory(
                DbConnection, false, OracleDialect.Provider);

            using (var db = dbFactory.Open()) {
                var res = db.Select<Einduk>().Take(10);  //<-- it hangs here, no stacktrace whatsoever
                foreach (var einduk in res) {
                    Console.WriteLine(einduk.ToString());
                }
            }
            Console.ReadLine();
        }
    }
}

そして、これは私のモデルクラスです:

namespace ConsoleApplication1
{
    public class Einduk
    {           
        [PrimaryKey]
        public string Akaun { get; set; }
        public string Jenis { get; set; }
        public string Bakaun { get; set; }
        public string Oldac { get; set; }
        public string Plgid { get; set; }
        public string Pnama { get; set; }
        public string Almat { get; set; }
        public string Kslah { get; set; }
        public DateTime? Trikh { get; set; }
        public decimal? Amaun { get; set; }

        public override string ToString() {
            return string.Format("Jenis: {0}, Akaun: {1}, Bakaun: {2}, Oldac: {3}, Plgid: {4}, Pnama: {5}, Almat: {6}, Kslah: {7}, Trikh: {8}, Amaun: {9}", Jenis, Akaun, Bakaun, Oldac, Plgid, Pnama, Almat, Kslah, Trikh, Amaun);
        }
    }
}

これは私のテーブルです。テーブルには主キーがないことに注意してください。しかし、私のモデルでは、Akaunそれが一意であることを知っているので、主キーとして設定しました。これにより問題が発生しますか?

CREATE TABLE "EINDUK" 
(   
    "JENIS" CHAR(1 BYTE), 
    "AKAUN" VARCHAR2(40 BYTE), 
    "BAKAUN" VARCHAR2(50 BYTE), 
    "OLDAC" VARCHAR2(20 BYTE), 
    "PLGID" VARCHAR2(15 BYTE), 
    "PNAMA" VARCHAR2(100 BYTE), 
    "ALMAT" VARCHAR2(282 BYTE), 
    "KSLAH" VARCHAR2(508 BYTE), 
    "TRIKH" DATE, 
    "AMAUN" NUMBER
)
4

1 に答える 1

3

Select().Take(10) を実行すると、すべてのデータをメモリにロードしてから、(メモリ内の) リストから最初の 10 レコードを取得しようとします。パラメータなしで Select を使用する代わりに、これを試してください

  SqlExpressionVisitor<Einduk> ev = OrmLiteConfig.DialectProvider.ExpressionVisitor<Einduk>();
  ev = ev.Limit(0,10);
  var res = db.Select<Einduk>(ev);

Ormlite の機能を理解するには、README.md ファイルをお読みください:

https://github.com/ServiceStack/ServiceStack.OrmLite/blob/master/README.md

于 2013-07-18T00:37:46.367 に答える