2016-07-08 4 views
1

私は現時点でアプリケーションを開発しています。私はSQLiteデータベースを使用したい項目を保存する。実装は一般的に(SQLite.Net-PCLライブラリを使用して)動作しますが、私はIItemというインターフェイスから継承したアイテムのコレクションを保存することに失敗しています。SQLiteデータベースにインターフェイス項目のリストを保存

それは次のように動作します:

var conn = new SQLiteConnection(new SQLitePlatformWinRT(), "myapp.db"); 

// Code that creates the `items` list. 

foreach (IItem item in items) 
    conn.InsertOrReplace(item, typeof(IItem)); 

をしかし、オーバーヘッドを減らすために、私はそれをこのように行うことを好む:

conn.InsertOrReplaceAll(items, typeof(List<IItem>)); 

悲しいことに、これが原因System.Reflection.TargetExceptionに動作しません。

後者の作業を行うためのアイデアは、何故パーフェクトの理由からですか?

答えて

0

ここでの問題は、InsertOrReplaceAllメソッドのパラメータとして間違った型を使用していることです。この方法ではobjTypeは、単一の項目の種類を表し、次のように、このメソッドを使用することができます:

conn.InsertOrReplaceAll(items, typeof(IItem)); 

は明らかにこれを確認するには、我々はsource code on GitHubを見ることができます:

public int InsertOrReplaceAll(IEnumerable objects, Type objType) 
{ 
    var c = 0; 
    RunInTransaction(() => 
    { 
     foreach (var r in objects) 
     { 
      c += InsertOrReplace(r, objType); 
     } 
    }); 
    return c; 
} 

をよりソースコードは、このメソッドで見つけることができる、それはまたInsertOrReplace(object obj, Type objType)メソッドを呼び出します。また、別のオーバーロード方法InsertOrReplaceAllがあります。

public int InsertOrReplaceAll(IEnumerable objects); 

この方法では、タイプの問題に気を付けることはできません。

+0

返信いただきありがとうございます。それはそれだった:) –

関連する問題