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.目前我用删除+新增的操作,实现修改。唯一的问题子表表的主键的一直变化。但是现在主表的子表时另一张表的主表,主键是不能变的。
保证子表的记录是存在的且存在主键,上述操作没有问题