1

Monotouch で Vici CoolStorage を試していますが、関係に問題があるようです。以下を使用して、データベースに単一の調査を入力し、for ループを使用して 5 つの質問のリストを生成しようとしています。

私がそれを実行すると、質問をデータベース内の調査にマッピングする際に問題があるようです。表示されるエラーは「Vici.CoolStorage.CSException: Relation Survey could not read」です。

クラス

[MapTo("Survey")]
public class Survey : CSObject<Survey, int>
{
    public int SurveyId { get { return (int)GetField ("SurveyId"); } }
    public string Title { get { return (string)GetField ("Title"); } set { SetField ("Title", value); } }
    public DateTime DateCreated { get { return (DateTime)GetField ("DateCreated"); } set { SetField ("DateCreated", value); } }
    public bool IsCurrent { get { return (bool)GetField ("IsCurrent"); } set { SetField ("IsCurrent", value); } }

    [OneToMany(LocalKey="SurveyId", ForeignKey="QuestionId")]
    public CSList<Question> Questions { get { return (CSList<Question>)GetField("Questions"); } }

}

[MapTo("Question")]
public class Question : CSObject<Question, int>
{
    public int QuestionId { get { return (int)GetField ("QuestionId"); } }
    public string Text { get { return (string)GetField ("Text"); } set { SetField ("Text", value); } }
    public int SurveyId { get { return (int)GetField ("SurveyId"); } }

    [ManyToOne(LocalKey="QuestionId", ForeignKey="SurveyId")]
    public Survey Survey { get { return (Survey)GetField ("Survey"); } set { SetField ("Survey", value); } }
}

データベース テーブル

CSDatabase.ExecuteNonQuery (@"CREATE TABLE Survey (SurveyId INTEGER PRIMARY KEY AUTOINCREMENT, Title TEXT(100) NOT NULL, DateCreated TEXT(50) NOT NULL, IsCurrent INTEGER)");
CSDatabase.ExecuteNonQuery (@"CREATE TABLE Question (QuestionId INTEGER PRIMARY KEY AUTOINCREMENT, Text TEXT(100) NOT NULL, SurveyId INTEGER REFERENCES Survey(SurveyId))");

ループ

for (int i = 1; i <= 10; i++) 
{
            Question q = Question.New ();
            q.Text = String.Format ("Question {0}", i);
            survey.Questions.Add (q);
}
survey.Save();
4

1 に答える 1

4

マップされたフィールドで正しい外部キーをリンクしていません。リレーションは次のように宣言する必要があります。

[OneToMany(LocalKey="SurveyId", ForeignKey="SurveyId")]
public CSList<Question> Questions ...

[ManyToOne(LocalKey="SurveyId", ForeignKey="SurveyId")]
public Survey Survey...
于 2012-11-07T13:50:36.767 に答える