public class Game { [Key] public Guid Id { get; set; } [DisplayName("游戏名称")] [Required(ErrorMessage = "{0}不能为空")] public string Name { get; set; } [DisplayName("添加时间")] public DateTime AddDate { get; set; } public ICollection<GameZone> GameZones { get; set; } }
public class GameZone { [Key] public Guid Id { get; set; }
public Guid GameID{get;set} [DisplayName("游戏名称")] public Game Game { get; set; } [DisplayName("游戏区名称")] [Required(ErrorMessage = "{0}不能为空")] public string Name { get; set; } }
public ActionResult Edit([Bind(Include = "Id,Name,Game,AddDate")] GameZone gamezone) { if (ModelState.IsValid) { gamezone.Game = _db.Games.Find(gamezone.Game.Id); gamezone.AddDate = DateTime.Now; _db.Entry(gamezone).State = EntityState.Modified; _db.SaveChanges(); return RedirectToAction("Index"); } return View(gamezone); }
在编辑的时候
ModelState.IsValid 永远是false,还有就算我把if注释掉
gamezone.Game这里的数据怎么修改都不会变。
复杂类型,貌似不会自动更新进去。你可以直接对Game进行更新啊。
我是说GameZone里面的Game_Id 不能更改
@浪潮之巅: Game_Id在哪儿?
@幻天芒: public Game Game { get; set; }这个关联,数据库中的GameZone表自动会生成Game_Id
@浪潮之巅: EF又不知道,看你的实体,并没有外键关系。
ModelState.IsValid 永远是false说明服务的验证失败
gamezone.Game这里的数据怎么修改都不会变。说明没有拿到对象值怎么能修改成功呢,
把需求说详细点说不定有人会解答
gamezone.Game = _db.Games.Find(gamezone.Game.Id);这条数据就是获取Game
建议抓一下 数据库中生成的sql语句 就明白真像了
sql 语句只修改Name字段。