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 方言,因此如果表映射上存在 schame,它将被使用。这意味着它将生成FROM [dbo].[Clubs]. 要纠正这个问题,只需TableAttribute从 MicroLite 2.1 开始删除 as 上的模式值是可选的。

附带说明一下,MicroLite 2.1In在 SqlBuilder fluent API 中引入了对 的支持,因此您可以更改:

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

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