Приложение для Windows Phone с локальным хранилищем sqlite

Я пытаюсь сохранить свои объекты, которые я получил из моего JSON, в local storage db с SQLite

Я импортировал множество пакетов, а также структуру SQLite.

Я также создал эти два класса: Activity.

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; }

Любая помощь о том, как правильно это сделать?

ИЗМЕНИТЬ У меня есть следующие ссылки:

введите здесь описание изображения


person Steaphann    schedule 27.05.2015    source источник
comment
Не уверен, что это та же проблема, но похоже, что это может быть: stackoverflow.com/questions/23463849/   -  person Sebastian L    schedule 27.05.2015
comment
@SebastianL да, это та же ошибка на той же платформе, и, похоже, она вызвана той же проблемой.   -  person redent84    schedule 27.05.2015


Ответы (1)


Ошибка вызвана тем, что SQLite.Net пытается сериализовать свойство с типом List<ActivityMember>, о котором SQLite.Net не знает. Аннотируя его с помощью атрибута SQLite-Net Extensions OneToMany, он должен игнорироваться SQLite.Net, поскольку OneToMany наследуется от атрибута Ignore SQLite.Net.

Если свойство не игнорируется SQLite.Net, это связано с тем, что атрибут Ignore не распознается. Эта проблема обычно возникает из-за того, что вы используете версию SQLite.Net, отличную от той, которая была скомпилирована для SQLite-Net Extensions. Чтобы решить эту проблему, вы должны убедиться, что используемые версии SQLite.Net совпадают.

Чтобы решить эту проблему, вы можете скопировать исходники расширения SQLite-Net в свой проект, чтобы заставить библиотеку для ссылки на вашу версию SQLite-Net.

Ответ на EDIT:

Как видно из ваших ссылок, у вас есть две библиотеки SQLite.Net:

  • SQLite.Net (и его асинхронный API SQLite.Net.Async)
  • SQLite для Windows Phone

Вы должны удалить ссылки на SQLiteNetExtensions, SQLite.Net.Async и SQLite.Net.Async и скомпилировать SQLite-Net Extensions исходники с вашими SQLite For Windows Phone библиотека.

person redent84    schedule 27.05.2015
comment
Где я могу получить эти источники? И я просто скопирую и вставлю это в свое решение? Извините, новичок в Windows dev.. - person Steaphann; 27.05.2015
comment
Может глупый вопрос. Но что вы имеете в виду под компиляцией источников расширений SQLite-net против... - person Steaphann; 27.05.2015
comment
Я имею в виду перекомпилировать расширения SQLite-Net из исходников, используя ту же зависимость SQLite.Net, которую вы используете в своем проекте. Самый простой подход — просто скопировать исходники в свой проект, таким образом вы заставляете библиотеку использовать ту же зависимость, которую используете вы. - person redent84; 27.05.2015
comment
То есть я просто загружаю его из источников, а затем добавляю существующий проект в свое решение? И нужно ли добавлять SQLiteNetExtensions-MvvmCross.csproj или SQLiteNetExtensions-PCL.csproj? - person Steaphann; 28.05.2015
comment
Просто скопируйте содержимое папок Attributes, Extensions и Exceptions в свой проект. - person redent84; 28.05.2015