スキャフォールディングされたリポジトリを使用して、VS2010 (.Net 4.0) で Entity Framework 5 を使用して Asp.NET MVC 4 アプリケーションを構築しようとしています (しかし、すべての EF5 機能が .Net 4.0 でサポートされているわけではないことを理解しています)。
私はどちらかというと一方的だと感じる関係を持っています。Event は TimeSlot に収まります。簡単にするために、これをプロパティとしてモデル化したいと思いました。
public class Event
{
public int Id { get; set; }
public int TimeSlotId { get; set; }
[ForeignKey("TimeSlotId")]
public TimeSlot TimeSlot { get; set; }
}
public class TimeSlot
{
public int Id { get; set; }
public int StartHour { get; set; }
//... more plain int properties
}
しかし、私はこれをまったく機能させることができないようです! データベースに TimeSlots テーブルを事前設定するときは、次のことを試みます。
var EventRep = new EventRepository();
var TimeSlotRep = new TimeSlotRepository();
var times = TimeSlotRep.All.GetEnumerator();
times.MoveNext();
var a = new Event { TimeSlot = times.Current };
EventRep.InsertOrUpdate(a);
EventRep.Save();
TimeSlotRep.Save();
つまり、データベースから TimeSlot を取得し、それを Event に割り当ててから、すべてを保存します。ただし、を保存しようとするとTimeSlotRepository
、例外が発生します。
The property 'Id' is part of the object's key information and cannot be modified.
これが TimeSlot.Id プロパティを編集しようとする理由について誰か説明がありますか?
この問題TimeSlot
は s のリストがないことに関連していEvent
ますか?
反対側のプロパティ/リストを持つために、EF の関係の両端が必要ですか?