11

これら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 オブジェクトを保存する方法はありますか? リストを保存するのに本当に苦労しているからです。

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

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

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

4

1 に答える 1

15

こちらの回答をご覧ください

SQLite-Net Extensions ライブラリの Text blob プロパティを使用して実行できます

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

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

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

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

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

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

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

お役に立てれば。

于 2016-04-25T21:20:49.883 に答える