Доступ к базе данных фонового агента WP7

Я начинающий программист на С#, поэтому я думаю, что решение моего вопроса может быть простым, но после нескольких дней поиска я не нашел ничего, что сработало бы для меня.

У меня есть приложение WP7, содержащее БД, созданную с помощью SQL CE.

КЛАСС PorniBD.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Data.Linq.Mapping;

namespace PhoneClassLibrary1
{
    [Table(Name = "Papilleros")]
    public class PorniBD
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = true)]
        public int Id { get; set; }
        [Column(CanBeNull = false)]
        public String Nombre { get; set; }
        [Column(CanBeNull = false)]
        public String FechaNac { get; set; }
        [Column(CanBeNull = false)]
        public Boolean Activo { get; set; }
        [Column(CanBeNull = false)]
        public String Icono { get; set; }
    }
}

КЛАСС PorniContext.cs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Data.Linq.Mapping;
using System.Data.Linq;

namespace PhoneClassLibrary1
{
    public class PorniContext : DataContext
    {
        public PorniContext(string connectionString) : base(connectionString)
        {
            //
        }

        public Table<PorniBD> Papilleros
        {
            get
            {
                return this.GetTable<PorniBD>();
            }
        }
    }
}

В моем приложении есть фоновый агент, созданный в другом проекте, как я узнал на этой странице: Link< /а>

Теперь мне нужно прочитать БД приложения из фонового агента, и этот класс содержит следующий OnInvoke void:

protected override void OnInvoke(ScheduledTask task)
        {
            List<PorniBD> listapapilleros = new List<PorniBD>();
            using (PorniContext basedatos = new PorniContext("Data Source='isostore:/basedatos.sdf'"))
            {
                listapornis = basedatos.Papilleros.ToList();
            }

            // Launch a toast to show that the agent is running.
            // The toast will not be shown if the foreground application is running.

            ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(10));
            NotifyComplete();
        }

но это невозможно, потому что DataSource изолированные в каждом проекте разные (я думаю), и я полагаю, что нужно исправить что-то еще...

Большое спасибо за вашу помощь, и извините, если мой уровень английского делает мое объяснение немного трудным для понимания...


person user2723183    schedule 27.08.2013    source источник


Ответы (1)


Просто создайте третий проект типа «Библиотека классов Windows Phone». Переместите код базы данных в этот третий проект, а затем укажите ссылку на него как из основного проекта, так и из проекта фонового агента.

person Kevin Gosse    schedule 28.08.2013
comment
Спасибо за ответ, КуКиз. Но когда я создаю третий проект, возникает проблема с использованием строки OnInvoke void. Ошибка связана с функцией ToList() DataContext: ее невозможно вызвать (я не знаю почему, потому что, когда я использую toList() из проекта приложения, вызов работает правильно). (см. обновленный код в моем исходном сообщении) - person user2723183; 29.08.2013
comment
@user2723183 user2723183 Убедитесь, что у вас есть строка using System.Linq; в верхней части вашего файла - person Kevin Gosse; 29.08.2013