Использование Микролита на SQLite
Я настроил базу данных SQLite с той же схемой, что и моя существующая база данных SQL server, и отметил следующее...
- имена полей SQLite (и, вероятно, все остальное) чувствительны к регистру.
- SqlBuilder MicroLite, по-видимому, вставляет префикс '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);
Микролит записал: "нет такой таблицы: dbo.Клубы "
1 ответ:
Это происходит потому,что SQLite не поддерживает табличные схемы, как MS SQL Server.
В ручном запросе вы не указываете schame для таблицы
FROM [Clubs], однако в атрибуте отображения вы укажетеdboКак схему, подобную этой:[Table(schema: "dbo", name: "Clubs")]
SqlBuilderне знает, какой диалект SQL используется, поэтому, если schame присутствует в отображении таблицы, он будет использоваться. Это означает, что он будет генерироватьFROM [dbo].[Clubs]. Чтобы исправить это, просто удалите значение схемы наTableAttributeas является необязательным с MicroLite 2.1 и далее.На заметку, MicroLite 2.1 представила поддержку
Inв sqlbuilder fluent API, так что вы можете изменить:.Where("ClubID = @p0", 3) .OrWhere("ClubID = @p1", 22)К
.Where("ClubID").In(3, 22)
Comments