首页 新闻 会员 周边

SavingChanges委托时,主子表对象时新增状态转变成修改状态时出现问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2012-08-21 08:51

protected void ZR_SavingChanges(object sender, EventArgs e)
{
  Entities context = sender as Entities;
  if (context!=null)
  {
  foreach (ObjectStateEntry entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Added))
  {
  if (entry.Entity.GetType() == typeof(T_ZR_OutsourceCorp))
  {
    T_ZR_OutsourceCorp osc = entry.Entity as T_ZR_OutsourceCorp;

//主表的主键为空,执行新增操作,主子表执行新增操作没问题

    if (osc.OutsourceCorpId == "")
    {
      osc.OutsourceCorpId = Guid.NewGuid().ToString().Replace("-", "");
      foreach (T_ZR_ProductionLicenceApply item in osc.T_ZR_ProductionLicenceApply)
      {
      item.ApplyId=Guid.NewGuid().ToString().Replace("-", "");
      }

      break;
    }

//主表主键不空,执行修改操作
    if (osc.OutsourceCorpId!="")
    {
      AJ_ModifyExtendInfo info = ModifyInfo(EntityState.Modified);
      osc.ModifyBy = info.ModifyBy;
      osc.ModifyTime = info.ModifyTime;
      entry.ChangeState(EntityState.Modified);//这个地方没有问题,可以讲主表的状态修改为Modified
      foreach (var temp in osc.T_ZR_ProductionLicenceApply)
      {

        //AcceptChanges 无法继续,因为该对象的键值与 ObjectStateManager 中的另一个对象冲突。请在调用 AcceptChanges 之前,确保键值是唯一的。
        context.ObjectStateManager.GetObjectStateEntry(temp).ChangeState(EntityState.Modified);
      }

      break;
  }  

}

问题补充:

使用odata协议,与服务端进行交互。由于odata put操作不支持深更新操作,而我想同时更新多张表。而odata post方法是允许发送多张表数据,而我在对象管理器执行保存操作时,将需要修改的数据的状态由新增状态变为修改状态。修改主表的状态没问题,但修改子表时却报错误。

1.我尝试过创建新的子表对象,并给子表对象赋予修改状态,重新生成子表主键是可以的,但是保证主键不变情况下,报相同的错误。

2.目前我用删除+新增的操作,实现修改。唯一的问题子表表的主键的一直变化。但是现在主表的子表时另一张表的主表,主键是不能变的。

江南_雾里看花的主页 江南_雾里看花 | 菜鸟二级 | 园豆:394
提问于:2012-08-08 10:26
< >
分享
所有回答(1)
0

保证子表的记录是存在的且存在主键,上述操作没有问题

江南_雾里看花 | 园豆:394 (菜鸟二级) | 2012-08-21 08:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册