Я делаю приложение для Windows Phone 7.1, и у меня возникают проблемы с отправкой изменений в мою базу данных. Вот структура таблиц в моей базе данных:
День ‹-1-----*-> Тренировка ‹-много-----1-> Спорт
Таким образом, в один день может быть много тренировок, а в тренировке — один вид спорта. Один и тот же вид спорта, естественно, может включать множество различных тренировок.
Первичные ключи выглядят следующим образом: Day — DateTime TrainingSession — int (генерируется БД) Sport — nvarchar(200)
Спорт будет просто иметь атрибуты sportName и iconFileName.
Я настроил ассоциации, поместив EntitySet в Day и Sport, а TrainingSession имеет EntityRef и EntityRef. Я не уверен на 100%, нужен ли EntitySet для Sport, поэтому, пожалуйста, поправьте меня, если я ошибаюсь. На данный момент я просто жестко закодировал некоторые виды спорта в своем классе 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 может быть связано с тем, что я не сохраняю какие-либо виды спорта в базе данных, может ли это быть так?