Я разрабатываю (или пытаюсь разработать) проект на C #, который хранит данные в базе данных SQLite. Я хотел бы использовать Linq для объектно-реляционного отображения. Согласно тому, что я прочитал, его можно использовать с SQLite, если вы загрузите System.Data.SQLite и dblinq .
И хотя он в основном работает для чтения данных из БД, я получаю ошибку синтаксиса SQL при попытке вставить что-либо. Я проверил в журналах, что Linq пытается выполнить такой запрос:
{INSERT INTO [sometable]([columnone], [columntwo])
VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input String (Size = 4000; Prec = 0; Scale = 0) [foo]
-- @p1: Input String (Size = 4000; Prec = 0; Scale = 0) [bar]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
}
Кажется, это SQL-запрос для MS Server, а не SQLite. Обидная часть это SqlProvider(Sql2008)
. Разве это не должно быть заменено чем-то, предоставленным dblinq?
Мой класс базы данных выглядит так:
[Database]
class MyDatabase : DataContext
{
public LibraryDatabase()
: base(new SQLiteConnection(
"DbLinqProvider=Sqlite; " +
"Data Source=database.s3db;"))
{
}
public Table<SomeObject> SomeTable;
}
Строка подключения взята из dblinq wiki .
Почему это не работает? Это потому, что я использую .NET 4.0? Кто-нибудь успешно использовал такую комбинацию? Есть ли другой способ заменить провайдера Linq?
РЕДАКТИРОВАТЬ: Отображение таблицы: (хотя я сомневаюсь, что ошибка здесь, поскольку чтение таблицы (с помощью цикла foreach), кажется, работает)
[Table(Name="sometable")]
class Element
{
[Column(Name = "id", IsPrimaryKey = true, IsDbGenerated=true)]
public int Id { get; set; }
[Column(Name="columnone")]
public string PropertyOne {get; set;}
[Column(Name="columntwo")]
public string PropertyTwo {get; set;}
}
Все связи между таблицами были закомментированы для тестирования (не помогает).
Затем вставляется элемент со следующим кодом:
myDatabase.SomeTable.InsertOnSubmit(element);
myDatabase.SubmitChanges();