1

我正在尝试使用 Entity Framework 5 在 VS2010 (.Net 4.0) 中构建一个 Asp.NET MVC 4 应用程序(但我知道 .Net 4.0 中并非所有 EF5 功能都支持),使用脚手架存储库。

我有一种我觉得相当片面的关系,一个事件适合一个时间段。为简单起见,我想将其建模为一个属性:

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();

即从数据库中获取一个时间段,将其分配给一个事件,然后保存所有内容。但是,当我尝试保存时TimeSlotRepository,出现异常:

The property 'Id' is part of the object's key information and cannot be modified.

有没有人解释为什么这会尝试编辑 TimeSlot.Id 属性?这个问题是否与没有 s 列表
的事实有关? 您是否需要 EF 中关系的两端才能拥有另一端的属性/列表? TimeSlotEvent

4

0 回答 0