代码之家  ›  专栏  ›  技术社区  ›  CodeRedick

为什么在更新linq对象时子属性会被覆盖?

  •  0
  • CodeRedick  · 技术社区  · 15 年前

    我正在更新一个对象,并尝试同时更新任何子对象。

    基本上我是在处理linqdatasource的onupdate事件。

    在datacontext类中,我有objectupdate函数(在这里,我刚刚有一个断点,以便可以看到值…)

    在linqdatasource.onupdateing事件e.newobject.child中为空,这毫无意义。我将其设置为一个新值,但当我到达datacontext.objectupdate newobject.child时,它已被旧值覆盖…

    所以在linqdatasource.update和datacontext.updateobject之间的某个地方,它正在用旧值填充对象…但我需要新的。

    有办法解决这个问题吗?还是我会精神崩溃?

    1 回复  |  直到 14 年前
        1
  •  0
  •   CodeRedick    15 年前

    我想我找到了问题所在。在通过.net反射程序运行linqdatasource之后,我注意到:

    1)实际上附加到数据上下文的是LinkDatasourceUpdateEventArguments.OriginalObject 2)将originalobject附加到数据上下文后,将值从newobject复制到originalobject

    我不明白的是为什么关联属性没有被复制。也许出于同样的原因你不能序列化它们?

    解决方法是/曾经亲自处理更新事件并执行实际提交,而不是让linqdatasource处理该部分。

    void FormDataSource_Updating(object sender, LinqDataSourceUpdateEventArgs e)
        {
    
            var newObj = e.NewObject;
    
            var table = FormContext.GetTable(e.NewObject.GetType());
    
            if (BuildingObject != null)
                BuildingObject(sender, new HeirarchicalBuildObjectEventArgs(newObj));
    
            table.Attach(newObj, e.OriginalObject);
    
            FormContext.SubmitChanges();
    
    
            e.Cancel = true;
        }