私はSQLiteデータベースにデータを格納するC#でプロジェクトを開発しています(または開発しようとしています)。オブジェクトリレーショナルマッピングにLinqを使用したいと思います。私が読んだことによると、System.Data.SQLiteとdblinqをダウンロードした場合、SQLiteで使用することは可能です。.NET 4.0 + Linq + SQLite + DbLink - どうすれば一緒に作業できますか?
ほとんどの場合、DBからデータを読み込むことはできますが、何かを挿入しようとすると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
}
MSサーバーではなく、SQLiteのためのSQLクエリのようです。怒っている部分は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プロバイダを置き換える別の方法はありますか?
EDIT:テーブルマッピング:テーブル間の
[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;}
}
すべての関係はテストのためにコメントアウトした(私はエラー)は、foreachループを使用して(表を読んだとして、ここで動作しているようです疑うが) (助けにならない)。 要素には、次のコードを挿入されている:あなたはORMのためのEntity Frameworkのを使用している
myDatabase.SomeTable.InsertOnSubmit(element);
myDatabase.SubmitChanges();
テーブルマッピングはどのように見えますか? – Pieter