保存实体时的DbUpdateException,一对多关系

时间:2015-07-31 10:55:47

标签: c# entity-framework

拥有一个包含DepotRayon个实体的实体模型,这样每个Rayon必须只与一个Depot相关联,并且每个Depot都可以关联零或更多Rayon

  

人造丝(0 .. *)< -------> (1)仓库

这是我的代码:

public void Update(Depot obj)
{
  var testDepot = DepotContainer.DepotSet.FirstOrDefault(c => c.Id == obj.Id);
  testDepot.Nom = obj.Nom;
  testDepot.Zone = obj.Zone;
  testDepot.Rayons = obj.Rayons;
  DepotContainer.SaveChanges();
}

仓库

public partial class Depot
{
 public Depot() { this.Rayons = new HashSet<Rayon>(); }

 public int Id { get; set; }
 public string Nom { get; set; }
 public string Zone { get; set; }

 public virtual ICollection<Rayon> Rayons { get; set; }
}

人造丝

public partial class Rayon
{
 public Rayon() { this.Article = new HashSet<Article>(); }

 public int Id { get; set; }
 public string Code { get; set; }
 public string Description { get; set; }

 public virtual Depot Depot { get; set; }
 public virtual ICollection<Article> Article { get; set; }
}

保存更改时出现以下错误:

  

其他信息:保存未公开其关系的外键属性的实体时发生错误。 EntityEntries属性将返回null,因为无法将单个实体标识为异常源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅InnerException。

内部执行

  

来自'DepotRayon'AssociationSet的关系处于'已删除'状态。给定多重约束,相应的“人造丝”也必须处于“已删除”状态。

1 个答案:

答案 0 :(得分:0)

问题在于,软件仓库的多重性必须是(0 ... 1),因为当我从软件仓库中移除人造丝时,人造丝实体中的外键变为空,这是异常的原因