C# 您需要在实体框架中指定关系的两端吗?

C# 您需要在实体框架中指定关系的两端吗?,c#,entity-framework,asp.net-mvc-4,.net-4.0,entity-framework-5,C#,Entity Framework,Asp.net Mvc 4,.net 4.0,Entity Framework 5,我正试图在VS2010(.NET 4.0)中使用Entity Framework 5(但我知道并非所有EF5功能都在.NET 4.0中受支持)使用框架存储库构建一个Asp.NET MVC 4应用程序 我有一个关系,我觉得是相当片面的,一个事件适合在一个时间段。为了简单起见,我想将其建模为一个属性: public class Event { public int Id { get; set; } public int TimeSlotId { get; set; } [Fo

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

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

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
}
然而,我似乎根本无法让它工作! 在数据库中预填充时隙表时,我尝试执行以下操作:

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();
i、 从数据库中获取一个时隙,将其分配给一个事件,然后保存所有内容。 但是,当我尝试保存
TimeSlotRepository
时,会出现异常:

The property 'Id' is part of the object's key information and cannot be modified.
有人解释过为什么会尝试编辑TimeSlot.Id属性吗?
此问题是否与
时隙
没有
事件
列表有关?

您是否需要EF中关系的两端都具有另一端的属性/列表

我会说在设计器中为同一设计创建一个单独的模型视图,并查看EF如何创建它。imho,这是因为
times.Current
EventRep
不属于同一上下文。为什么
TimeSlotRep
仍需要保存?您只需要保存到
EventRep
。我不认为你没有关系的另一端,我相信我最近已经这样做了。如果我错了,但在
TimeSlotRep.Save
之前没有处理该枚举数,请更正我。
TimeSlotRep.All
返回什么类型?我正在尝试保存
TimeSlotRep
,因为如果我没有这样做,当创建
事件时,在会话期间一切都会工作,但是当我在下一个会话中将其从数据库中取出时,它将具有
TimeSlot=null
。但你是对的!保存
TimeSlotRep
似乎并没有什么不同