我试图更新模型,但得到错误“操作失败:关系无法更改,因为一个或多个外键属性是不可空。当对关系进行更改时,相关的外键属性设置为空值;如果外键不支持空值,则必须定义新的关系,必须为外键属性指定另一个非空值,或者不相关的对象必须被删除。“外键约束,与收集子对象的EF
从我从The relationship could not be changed because one or more of the foreign-key properties is non-nullable明白这个问题可能是与实体框架是如何处理我的虚拟ICollection的
但是我真的不知道如何使用脚手架库模式时,实施解决方案。我必须编辑Save() - 方法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更改为可为null来成功地删除错误。在检查数据库时,我可以看到确切的问题。
比方说,我有一个值为“电子邮件”的AttendeeInformationField。当我编辑我的MagnetEvent时,AttendeeInformationField将MagnetEventId更新为null,然后使用正确的MagnetEventId和Value添加新帖子。
我非常希望AttendeeInformationField中的帖子被更新。
你能发布你的查询和更新代码吗? – 2012-04-16 07:23:56
当然,我更新了原文。 – 2012-04-16 07:49:03