实体框架模型更新,但模型的其他项目列表未更新

时间:2013-07-21 22:35:39

标签: entity-framework-5

这是我的问题。我恢复了一个旧的基于文本的游戏,使用平面文件进行保存和加载。我使用带有Entity Framework 5和SQL Server 2012的MVC 4将旧的C ++代码移植到C#。使用Razor视图渲染页面非常简单。构建用于创建/编辑房间的向导时会出现问题。

Room包含一组Exit对象。当我第一次创建房间并分配出口时,一切正常。什么不起作用是我编辑房间和更改出口。在我的编辑代码中设置一个断点显示退出值已经改变,没有问题将房间状态设置为修改,并且房间似乎保存得很好,即更改名称和描述得到更新。但是,退出信息不会。

我尝试遍历退出列表,将每个出口标记为已修改,但在保存期间会抛出所有类型的错误。我的问题是这个。更新房间模型出口列表的正确方法是什么?

我在这里尝试了其他解决方案,在保存之前刷新,将新值复制到旧值,但没有任何效果。如何让退出对象更新到我的数据库。提前谢谢。

public abstract class Entity
{
    public virtual int Id { get; set; }

    public virtual string Name { get; set; }
    public virtual string Description { get; set; }

}

public class Room : Entity
{
    public virtual ICollection<Exit> Exits { get; set; }
}

public class Exit : Entity
{
    // The room to which we belong
    public int RoomId { get; set; }
    public Room Room { get; set; }

    // The room to which we connect
    public int? ToRoomId { get; set; }
    public Room ToRoom { get; set; }
}

我的存储库方法

public IEnumerable<Room> AllRoomsInclusive()
{
    var rooms = Context.Rooms.Include(r => r.Exits).ToList();
    return rooms;
}

public void Update(Room room)
{
    Context.Entry(room).State = EntityState.Modified;
}

public void Save()
{
    Context.SaveChanges();
}

我看到ToRoomId在控制器的编辑方法中更新,即在get方法期间为ToRoomId 6,在post方法期间进行编辑,将其设置为ToRoomId 10.此值在保存时不反映在数据库中。

0 个答案:

没有答案