这是我的问题。我恢复了一个旧的基于文本的游戏,使用平面文件进行保存和加载。我使用带有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.此值在保存时不反映在数据库中。