3

既存の SQL サーバー データベースと同じスキーマで SQLite データベースをセットアップし、次の点に注意しました...

  1. SQLite フィールド名 (およびおそらくその他すべて) では、大文字と小文字が区別されます。
  2. MicroLite の SqlBuilder は、接頭辞「dbo」を挿入しているようです。SQLite が好まないテーブル名の前に...

このクエリは機能します...

query = new SqlQuery("SELECT [ClubID], [Name] FROM [Clubs] WHERE [ClubID] = @p0", 3);

clubs = session.Fetch<MicroLiteClub>(query);

これはそうではありません...

query = SqlBuilder.Select("*")
                  .From(typeof(MicroLiteClub))
                  .Where("ClubID = @p0", 3)
                  .OrWhere("ClubID = @p1", 22)
                  .OrderByDescending("Name")
                  .ToSqlQuery();

clubs = session.Fetch<MicroLiteClub>(query);

MicroLite ログ:「そのようなテーブルはありません: dbo.Clubs」

4

1 に答える 1

1

これは、SQLite が MS SQL Server のようなテーブル スキーマをサポートしていないために発生しています。

手作りのクエリでは、テーブルのスキーマFROM [Clubs]を指定していませんが、マッピング属性では次dboのようにスキーマとして指定します。

[Table(schema: "dbo", name: "Clubs")]

SqlBuilderどの SQL ダイアレクトが使用されているかを認識しないため、テーブル マッピングにスキームが存在する場合は、それが使用されます。これは、生成されることを意味しますFROM [dbo].[Clubs]TableAttributeこれを修正するには、MicroLite 2.1 以降ではオプションである as のスキーマ値を削除するだけです。

ちなみに、MicroLite 2.1 ではInSqlBuilder fluent API でのサポートが導入されたため、次のように変更できます。

.Where("ClubID = @p0", 3)
.OrWhere("ClubID = @p1", 22)

.Where("ClubID").In(3, 22)
于 2012-11-11T12:59:44.117 に答える