Windows Phone 7.1 アプリケーションを作成していますが、データベースに変更を送信するのに苦労しています。私のデータベースのテーブルの構造は次のとおりです。
1 日目 <-1-----*-> トレーニング セッション <-多数-----1-> スポーツ
したがって、1 日に多くのトレーニング セッションがあり、トレーニング セッションには 1 つのスポーツがあります。1 つのスポーツが多くの異なるトレーニング セッションに含まれることは自然なことです。
主キーは次のようになります: Day - DateTime TrainingSession - int (DB 生成) Sport - nvarchar(200)
Sports には、単純に属性 sportName と iconFileName があります。
Day と Sport の両方に EntitySet を配置して Associations を設定しました。TrainingSession には EntityRef と EntityRef があります。Sport に EntitySet が必要かどうかは 100% わかりません。間違っている場合は訂正してください。とりあえず、テスト用に 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 was Unhandled: 新しくないエンティティをアタッチまたは追加しようとしました。別の DataContext から読み込まれた可能性があります。これはサポートされていません。
このエラーが発生する前に、NullReferenceExceptions も取得していました。
私は解決策を探していましたが、Detach を使用したり、Attach で回避策を使用したりする人もいましたが、それを自分のコードに実装する方法がわかりませんでした。誰か助けてくれませんか?
また、NullReferenceException は、スポーツをデータベースに保存していないという事実から来ている可能性があると考えましたが、そうでしょうか?