我正在制作一个 Windows Phone 7.1 应用程序,但在将更改提交到我的数据库时遇到了很多麻烦。这是我数据库中表的结构:
第 <-1--*-> 天训练课 <----1-> 运动
所以,一天可以有很多训练课,而一个训练课有一项运动。一项运动自然可以在许多不同的训练课程中进行。
主键如下所示:Day - DateTime TrainingSession - int(DB 生成) Sport - nvarchar(200)
Sports 将仅具有属性 sportName 和 iconFileName。
我通过将 EntitySet 放在 Day 和 Sport 中来建立关联,并且 TrainingSession 具有 EntityRef 和 EntityRef。我不是 100% 确定 Sport 是否需要 EntitySet,所以如果我错了,请纠正我。目前,我只是在我的 Sport 类中对一些运动进行了硬编码以进行测试,您会看到我检索了一个 ObservableCollection 以将它们取出。
以下是我如何尝试创建一组包含训练课程的日子,每个训练课程都有不同的运动:
public void CreateDay(DateTime date)
{
FitPlanDataContext calendarDatabase = new FitPlanDataContext(FitPlanDataContext.ConnectionString);
DateTime firstDate = new DateTime(date.Year, date.Month, 1);
DayItem dayItem = new DayItem();
dayItem.DateTime = firstDate;
fillTestDayItemWithRandomData(dayItem);
calendarDatabase.DayItems.InsertOnSubmit(dayItem);
calendarDatabase.SubmitChanges();
}
private void fillTestDayItemWithRandomData(DayItem dayItem)
{
ObservableCollection<SportArt> sportArtCollection = SportArtController.GetAllSports();
dayItem.TrainingSessions = new EntitySet<TrainingSession>();
ObservableCollection<TrainingSession> trainingSessionCollection = new ObservableCollection<TrainingSession>();
TrainingSession trainingSession1 = new TrainingSession();
trainingSession1.DayItem = dayItem;
trainingSession1.SportArt = sportArtCollection[1];
trainingSessionCollection.Add(trainingSession1);
TrainingSession trainingSession2 = new TrainingSession();
trainingSession2.DayItem = dayItem;
trainingSession2.SportArt = sportArtCollection[2];
trainingSessionCollection.Add(trainingSession2);
FitPlanDataContext calendarDatabase = new FitPlanDataContext(FitPlanDataContext.ConnectionString);
calendarDatabase.TrainingSessions.InsertAllOnSubmit<TrainingSession>(trainingSessionCollection);
}
这段代码对我不起作用,它给了我以下错误:
NotSupportedException 未处理:已尝试附加或添加一个不是新的实体,可能是从另一个 DataContext 加载的。这是不支持的。
在我得到这个错误之前,我也得到了 NullReferenceExceptions。
我一直在寻找解决方案,我看到有些人使用 Detach 或带有 Attach 的解决方法,但我还没有弄清楚如何将它实现到我的代码中。有人可以帮我解决这个问题吗?
另外,我认为 NullReferenceException 可能来自我没有将任何运动保存到数据库的事实,可能是这样吗?