我正试图让我的大脑围绕 Silverlight RIA
我已经到了可以使用对象集合创建对象的地步,该对象集合也具有对象集合。
包含测试问题的测试对象,包含问题答案。
我已经建立了关联,并将数据发送到 silverlight 应用程序。
所以在我加载的回调中......我可以看到所有数据
private void TestLoaded(LoadOperation lo)
{
var ce =dc.Tests.CanEdit;
dc.Tests.ToList()[0].TestQuestions.ToList()[0].StudentAnswerID = 2;
}
var ce =dc.Tests.CanEdit; //CanEdit = true
但下一行给出了错误:“SilverlightApplication2.Web.Question”类型的此 EntitySet 不支持“编辑”操作。
所以我的问题是为什么 CanEdit = true?在后面的代码中设置值的更优雅的方式是什么?
剩下的代码......
public class Test
{
private List<Question> _testQuestions = new List<Question>();
[Key]
public int TestID { get; set; }
public string TestName { get; set; }
[Include]
[Association("Assoc1", "TestID", "TestID,QuestionID")]
public List<Question> TestQuestions
{
get { return _testQuestions; }
set { _testQuestions = value; }
}
}
public class Question
{
private List<Answer> _questionAnswers = new List<Answer>();
[Key]
public int TestID { get; set; }
[Key]
public int QuestionID { get; set; }
public string QuestionText { get; set; }
public int CorrectAnswerID { get; set; }
public int StudentAnswerID { get; set; }
[Include]
[Association("Assoc2", "QuestionID", "QuestionID,AnswerID")]
public List<Answer> QuestionAnswers
{
get { return _questionAnswers; }
set { _questionAnswers = value; }
}
}
public class Answer
{
[Key]
public int QuestionID { get; set; }
[Key]
public int AnswerID { get; set; }
public string AnswerText { get; set; }
}
//数据填充器
public class TestBuilder
{
public List<Test> MakeATest()
{
var ret = new List<Test>();
var t = new Test()
{
TestID = 1,
TestName = "The Test",
};
var tq = new Question() { TestID = 1, QuestionID = 1, CorrectAnswerID=1, QuestionText = "T1Q1" };
var a = new Answer() { QuestionID = 1, AnswerID = 1, AnswerText = "T1Q1A1" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 1, AnswerID = 2, AnswerText = "T1Q1A2" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 1, AnswerID = 3, AnswerText = "T1Q1A3" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 1, AnswerID = 4, AnswerText = "T1Q1A4" };
tq.QuestionAnswers.Add(a);
t.TestQuestions.Add(tq);
//second question
tq = new Question() { TestID = 1, QuestionID = 2, CorrectAnswerID = 3, QuestionText = "T1Q2" };
a = new Answer() { QuestionID = 2, AnswerID = 1, AnswerText = "T1Q2A1" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 2, AnswerID = 2, AnswerText = "T1Q2A2" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 2, AnswerID = 3, AnswerText = "T1Q2A3" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 2, AnswerID = 4, AnswerText = "T1Q2A4" };
tq.QuestionAnswers.Add(a);
t.TestQuestions.Add(tq);
//third question
tq = new Question() { TestID = 1, QuestionID =3, CorrectAnswerID = 4, QuestionText = "T1Q3" };
a = new Answer() { QuestionID = 3, AnswerID = 1, AnswerText = "T1Q3A1" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 3, AnswerID = 2, AnswerText = "T1Q3A2" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 3, AnswerID = 3, AnswerText = "T1Q3A3" };
tq.QuestionAnswers.Add(a);
a = new Answer() { QuestionID = 3, AnswerID = 4, AnswerText = "T1Q3A4" };
tq.QuestionAnswers.Add(a);
t.TestQuestions.Add(tq);
ret.Add(t);
return ret;
}
}
域名服务......
[EnableClientAccess()]
public class TestDomainService : DomainService
{
public IEnumerable<Test> GetTest()
{
var tb = new TestBuilder();
return tb.MakeATest();
}
public void InsertTest(Test currentData)
{}
public void UpdateTest(Test currentData)
{}
public void DeleteTest(Test currentData)
{}
}
银光边……
private void GetTest_Click(object sender, RoutedEventArgs e)
{
dc.Load(dc.GetTestQuery(),
LoadBehavior.RefreshCurrent ,
TestLoaded,
null);
}
private void TestLoaded(LoadOperation lo)
{
var ce =dc.Tests.CanEdit;
dc.Tests.ToList()[0].TestQuestions.ToList()[0].StudentAnswerID = 2;
}