Использование Микролита на SQLite



Я настроил базу данных SQLite с той же схемой, что и моя существующая база данных SQL server, и отметил следующее...




  1. имена полей SQLite (и, вероятно, все остальное) чувствительны к регистру.

  2. 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.Клубы "

565   1  

1 ответ:

Это происходит потому,что SQLite не поддерживает табличные схемы, как MS SQL Server.

В ручном запросе вы не указываете schame для таблицы FROM [Clubs], однако в атрибуте отображения вы укажете dbo Как схему, подобную этой:

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

SqlBuilder не знает, какой диалект SQL используется, поэтому, если schame присутствует в отображении таблицы, он будет использоваться. Это означает, что он будет генерировать FROM [dbo].[Clubs]. Чтобы исправить это, просто удалите значение схемы на TableAttribute as является необязательным с MicroLite 2.1 и далее.

На заметку, MicroLite 2.1 представила поддержку In в sqlbuilder fluent API, так что вы можете изменить:

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

К

.Where("ClubID").In(3, 22)

Comments

    Ничего не найдено.