web-dev-qa-db-ja.com

オブジェクトのリストをSQLite.netに保存するにはどうすればよいですか?

私がこれらの2つのオブジェクトを持っていると仮定しましょう

class Customer {
   [PrimaryKey]
   public string id;
   [??????]
   public List<int> addresses;
}

そして

class Address {
     [PrimaryKey, AutoIncrement]
     public int id;
     public string street;
     public int number;
}

SQLite.NET ORMを使用してCustomersオブジェクトを保存する方法はありますか?リストを保存するのに本当に苦労しているからです。

そのような方法がない場合、オブジェクトがロードされたときにコードがトリガーされるように、実装できるイベントやオーバーライドできるメソッドはありますか?

アドレスのリストの上に[無視]を追加するという方針に沿って何かを考えていました。イベントがトリガーされたら、SQLite.netを使用して別のテーブルからアドレスのIDをロードできます。

あなたが提供できるどんな助けにも前もって感謝します

10
Cruces

この答えを見てください ここ

SQLite-Net Extensionsライブラリ のテキストブロブプロパティを使用してこれを行うことができます。

たとえば、Modelクラスでは次のようになります。

public class Customer 
{
   [PrimaryKey]
   public string id;
   [TextBlob("addressesBlobbed")]
   public List<int> addresses { get; set; }
   public string addressesBlobbed { get; set; } // serialized CoconutWaterBrands
}

テキストブロブプロパティに関するドキュメントから:

テキストブロブプロパティは、保存時にテキストプロパティにシリアル化され、ロード時に逆シリアル化されます。これにより、単純なオブジェクトを同じテーブルの1つの列に格納できます。

テキストブロブプロパティには、オブジェクトのシリアル化と逆シリアル化のオーバーヘッドが少なく、いくつかの制限がありますが、基本タイプのリストやディクショナリ、または単純な関係などの単純なオブジェクトを格納するための最良の方法です。テキストブロブプロパティには、シリアル化されたオブジェクトが格納されている宣言された文字列プロパティが必要です。

テキストブロブプロパティは、他のオブジェクトとの関係や、その親との逆の関係を持つことはできません。

TextBlobOperations.SetTextSerializerメソッドを使用して他のシリアライザーが指定されていない場合は、JSONベースのシリアライザーが使用されます。 JSONシリアライザーを使用するには、Newtonsoft Json.Netライブラリへの参照がプロジェクトに含まれている必要があります。これは、NuGetパッケージとしても利用できます。

お役に立てれば。

9
Iain Smith