1

私から戻ってきたオブジェクトをデータベースに保存しようとしてJSONlocal storageますSQLite

多くのパッケージと SQLite フレームワークをインポートしました。

次の 2 つのクラスも作成しました

public class Activity : INotifyPropertyChanged
    {
        [SQLite.PrimaryKey, SQLite.AutoIncrement]
        public int act_id
        {
            get;
            set;
        }
        //The Id property is marked as the Primary Key
        private int act_organization_id_value;
        private int act_creator_id_value;
        private int act_free_value;
        private int act_subcription_value;
        private int act_external_value;
        private int act_active_value;
        private int act_future_value;
        private int act_status_value;
        private int act_viewed_value;
        private string act_location_value = String.Empty;
        private string act_lng_value = String.Empty;
        private string act_title_value = String.Empty;
        private string act_information_value = String.Empty;
        private string act_type_value = String.Empty;
        private string act_color_value = String.Empty;
        private string act_event_identifier_value = String.Empty;
        private DateTime act_start_value = DateTime.Now;
        private DateTime act_end_value = DateTime.Now;

         [OneToMany(CascadeOperations = CascadeOperation.All)]
        public List<ActivityMember> membrs { get; set; }

       //Other getters and setters
}

活動メンバー

   public class ActivityMember : INotifyPropertyChanged
    {
        [SQLite.PrimaryKey, SQLite.AutoIncrement]
        public int mem_id
        {
            get;
            set;
        }

        private int mem_activity_id_value;
        private int mem_organization_id_value;
        private int mem_role_id_value;
        private int mem_creator_value;
        private int mem_accepted_value;
        private int mem_activity_accepted_value;
        private int mem_active_value;
        private int mem_deleted_value;
        private string mem_profile_color_value = String.Empty;
        private string mem_picture_value = String.Empty;
        private string mem_email_value = String.Empty;
        private string mem_phone_value = String.Empty;
        private string mem_gsm_value = String.Empty;
        private string mem_address_value = String.Empty;
        private string mem_postal_value = String.Empty;
        private string mem_city_value = String.Empty;
        private string mem_country_id_value = String.Empty;
        private string mem_first_name_value = String.Empty;
        private string mem_last_name_value = String.Empty;
        private string mem_extra_info_value = String.Empty;
        private string mem_street_value = String.Empty;
        private string mem_streetnumber_value = String.Empty;
        private string mem_gender_value = String.Empty;
        private DateTime mem_birthdate_value = DateTime.Now;

        [ManyToOne]      // Many to one relationship with Activity
        public Activity activity { get; set; }

        // all other getters and setters
}

アクティビティは、より多くの ActivityMembers を持つことができます。ビルドして実行すると、次のエラーが発生します。 ここに画像の説明を入力

デバッグすると、次の行が原因であることがわかりました。

   [OneToMany(CascadeOperations = CascadeOperation.All)]
        public List<ActivityMember> membrs { get; set; }

活動中のメンバー:

  [ManyToOne]      // Many to one relationship with Activity
    public Activity activity { get; set; }

これをどのように正しく行うかについて何か助けはありますか?

編集 私はこれらの参照を持っています:

ここに画像の説明を入力

4

1 に答える 1

0

エラーは、SQLite.Net が typeList<ActivityMember>でプロパティをシリアル化しようとしているために発生しています。これは、SQLite.Net が認識していない型です。SQLite-Net Extensions 属性で注釈を付けると、SQLite.Net 属性から継承OneToManyされるため、SQLite.Net によって無視されます。OneToManyIgnore

プロパティが SQLite.Net によって無視されていないのは、Ignore属性が認識されていないためです。この問題は通常、SQLite-Net 拡張機能に対するバージョンがコンパイルされた別の SQLite.Net バージョンを使用しているために発生します。この問題を解決するには、使用されている SQLite.Net のバージョンが同じであることを確認する必要があります。

これを解決するには、 SQLite-Net 拡張機能のソースをプロジェクトにコピーして、ライブラリが SQLite-Net のバージョンにリンクするように強制します。

EDIT への応答:

参照でわかるように、2 つの SQLite.Net ライブラリがあります。

  • SQLite.Net (およびその非同期 API SQLite.Net.Async)
  • Windows Phone 用 SQLite

SQLiteNetExtensionsSQLite.Net.Asyncおよびへの参照を削除し、ライブラリに対してソースSQLite.Net.Asyncをコンパイルする必要があります。SQLite-Net ExtensionsSQLite For Windows Phone

于 2015-05-27T09:30:05.993 に答える