这是我的问题。我恢复了我的一个基于文本的旧游戏,它使用平面文件进行保存和加载。我一直在使用 MVC 4 与 Entity Framework 5 和 SQL Server 2012 将我的旧 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。此值不会反映在保存时的数据库中。