我试图更新模型,但得到的错误“操作失败:关系不能被改变,因为一个或多个外键的属性是不可为空当的改变有关系作出的相关。外键属性设置为空值,如果外键不支持空值,新的关系必须定义,外键属性必须指定一个非空值,或者无关的对象必须被删除“。
据我了解,从的关系无法改变,因为一个或多个外键的属性是不可为空的问题,可能与实体框架是如何处理我的虚拟的ICollection
但是我真的不知道如何使用脚手架库模式时,实施解决方案。 我一定要编辑保存() - 方法ParentObjectRepository级?
其实我真的觉得必须有一些方法,使EF明白这一点。 我看不到EF-队怎么想“也许没有人使用对象的集合与外键约束,让不支持”。
更新添加的代码
[HttpPost]
public ActionResult Edit(int id, FormCollection formCollection)
{
var eventRepository = new MagnetEventRepository();
var original = eventRepository.Find(id);
UpdateModel(original);
eventRepository.Save();
return RedirectToAction("Details", "Home", new { slug = original.Slug });
}
public void Save()
{
context.SaveChanges();
}
更多的代码:
public class MagnetEvent
{
public virtual int Id { get; set; }
[Required]
public virtual string Name { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm}")]
[DataType(DataType.DateTime)]
public virtual DateTime? StartDate { get; set; }
public virtual string Description { get; set; }
[StringLength(100)]
public virtual string Slug { get; set; }
public virtual int MaximumCapacity { get; set; }
[DataType(DataType.Currency)]
public virtual int TicketPrice { get; set; }
public virtual int LocationId { get; set; }
public virtual Location Location { get; set; }
public virtual Collection<Ticket> Tickets { get; set; }
public virtual Collection<AttendeeInformationField> CaptureAttendeeInformationFields { get; set; }
public virtual int CustomerId { get; set; }
[Required]
public virtual CUSTOMER Customer { get; set; }
}
保存() - 方法是从MagnetEventRepository,它是从上述的类脚手架。
另一个更新我成功地在AttendeeInformationField改变MagnetEventId可空INT删除的错误。 当检查数据库中,我可以清楚地看到什么是错的。
比方说,我有值“电子邮件”一单AttendeeInformationField。 当我编辑MagnetEvent,该AttendeeInformationField更新MagnetEventId为空,然后添加一个新的职位以正确的MagnetEventId和价值。
我很喜欢多如果AttendeeInformationField的职位,而不是更新。