CoolStorage в Windows Phone 7 - проблема с отображением - PullRequest
4 голосов
/ 12 мая 2011

Я использую Vici.CoolStorage в приложении Windows Phone 7 для доступа к базе данных SQLite.В этой строке я получаю исключение нулевой ссылки:

 CSList<Regimen> regimens = Regimen.List();

В моей базе данных есть две таблицы:

CREATE TABLE Regimen (
    ID INTEGER PRIMARY KEY,
    Name TEXT(50) NOT NULL
);

CREATE TABLE WorkoutDay (
    ID INTEGER PRIMARY KEY,
    DayNumber INTEGER NOT NULL,
    RegimenID INTEGER REFERENCES Regimen(ID)
);

Сопоставление для связанных моделей:

using Vici.CoolStorage;

namespace MyApp.Core.Domain
{
    [MapTo("Regimen")]
    public class Regimen : CSObject<Regimen,int>
    {  
        public int ID
        {
            get { return (int)GetField("ID"); }
            set { SetField("ID", value); }
        }
        public string Name
        {
            get { return (string)GetField("Name"); }
            set { SetField("Name", value); }
        }

        [OneToMany(LocalKey = "ID", ForeignKey = "RegimenID")]
        public CSList WorkoutDays
        {
            get { return (CSList)GetField("WorkoutDays"); }
        }
    }
}

using Vici.CoolStorage;

namespace MyApp.Core.Domain
{
    [MapTo("WorkoutDay")]
    public class WorkoutDay : CSObject<WorkoutDay,int>
    {
        public int ID
        {
            get { return (int)GetField("ID"); }
            set { SetField("ID", value); }
        }
        public int DayNumber
        {
            get { return (int)GetField("DayNumber"); }
            set { SetField("DayNumber", value); }
        }

        [ManyToOne(LocalKey="RegimenID", ForeignKey="ID")]
        public Regimen Regimen
        {
            get { return (Regimen)GetField("Regimen"); }
            set { SetField("Regimen", value);}
        }
    }
}

Если я закомментирую отношение OneToMany в модели режима, оно будет работать нормально.Я не могу понять, что не так с моим отображением.

1 Ответ

3 голосов
/ 12 мая 2011

Тип возвращаемого значения не должен быть CSList, это должно быть CSList<WorkoutDay> в вашем классе Regimen, поэтому измените это:

    [OneToMany(LocalKey = "ID", ForeignKey = "RegimenID")]
    public CSList WorkoutDays
    {
        get { return (CSList)GetField("WorkoutDays"); }
    }

На это:

    [OneToMany(LocalKey = "ID", ForeignKey = "RegimenID")]
    public CSList<WorkoutDay> WorkoutDays
    {
        get { return (CSList<WorkoutDay>)GetField("WorkoutDays"); }
    }

Документация здесь(Последний абзац раздела Отношения один-ко-многим ): http://viciproject.com/wiki/Projects/CoolStorage/Doc/UserGuide/Mapping

...